разница между соотношением сторон изображения и изображения

Я добавил Imageview в UIView и установил свойство AspectToFit. В соответствии с требованиями приложения мне нужно добавить еще одно изображение в изображение.

iPhone 6s Plus

    float width;
    float height;
    float x;
    float y;

    CGSize imageViewSize =  self.getImageView.bounds.size;// self.getImageView.frame.size;
    CGSize imageSize = self.getImage.size;
    CGFloat minFactor = imageViewSize.width / imageSize.width;
    if (imageViewSize.height / imageSize.height < minFactor)
    {
        minFactor = imageViewSize.height / imageSize.height;
    }
    CGRect frame = self.getImageView.frame;
    NSLog(@"view height..%@",NSStringFromCGRect (frame));
    CGSize resultSize = CGSizeMake(minFactor * imageSize.width, minFactor * imageSize.height);
    UIImage *newimage =  [self imageWithImage:self.getImage scaledToSize:resultSize];
    float mainwidth = imageViewSize.width;
    float mainheight = imageViewSize.height;

    float imagewidth = newimage.size.width;
    float imageheight = newimage.size.height;

    _widthdiff = mainwidth-imagewidth;
    _heightdiff = mainheight-imageheight;

    x = self.view.frame.size.width-width-0-_widthdiff/2;
    y = self.view.frame.size.height-height-116-_heightdiff/2;

imageview = [[UIImageView alloc]
                 initWithFrame:CGRectMake(x, y, width, height)];
    [imageview setContentMode:UIViewContentModeScaleAspectFit];

Этот код работает нормально для всех устройств, кроме iPhone (iPhone 6 Plus, iPone 7 Plus). Как я вижу, проблема только в устройствах размера Plus.

Есть ли другой способ расчета разницы или соотношения между изображением и правильным изображением? Пожалуйста посоветуй.

Пожалуйста, обратитесь к прикрепленному изображениюiPhone 5s


person Minkle Garg    schedule 10.04.2017    source источник
comment
неясно, с какой именно проблемой вы столкнулись.   -  person Shubhank    schedule 10.04.2017
comment
@Shubhank Я отредактировал свой вопрос, прикрепил два изображения, одно для iPhone 5s, а другое для iPhone 6s Plus. Вы можете видеть, что позиция изображения qrcode точно соответствует uiimage, который начинается в uiimageview после подгонки соотношения сторон, но в iPhone 6s Plus позиция qrcode неверна.   -  person Minkle Garg    schedule 10.04.2017
comment
где присваиваются значения width и height?   -  person Shubhank    schedule 10.04.2017
comment
@Shubhank это 75 * 75, ширина 75, высота 75   -  person Minkle Garg    schedule 10.04.2017


Ответы (1)


Мы можем добавить новое изображение, рассчитав размер старого изображения, а затем добавить его в UIView в соответствии с требованиями.

    CGSize imageViewSize =   self.getImageView.frame.size;
    CGSize imageSize = self.getImage.size;
    CGFloat minFactor = imageViewSize.width / imageSize.width;
    if (imageViewSize.height / imageSize.height < minFactor)
    {
        minFactor = imageViewSize.height / imageSize.height;
    }
    CGSize resultSize = CGSizeMake(minFactor * imageSize.width, minFactor * imageSize.height);

    UIImage *newimage =  [self imageWithImage:self.getImage scaledToSize:resultSize];
self.duplicateimageview = [[UIImageView alloc]
                                   initWithFrame:CGRectMake(self.view.frame.size.width/2-newimage.size.width/2, self.view.frame.size.height/2-newimage.size.height/2, newimage.size.width, newimage.size.height)];
        [self.view addSubview:self.duplicateimageview];
        self.duplicateimageview.image = newimage;    

- (UIImage*)imageWithImage:(UIImage*)image
              scaledToSize:(CGSize)newSize;
{
    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
person Minkle Garg    schedule 04.05.2017