2016-06-23 2 views
0

два способа набора UIImage к А UIImageView:разница между UIImageView.image = ... и UIimageView.layer.content =

Первое:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

Второе:

self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]); 

в чем разница между двумя способами?

какой из них лучше?

Фактически. Что я хочу сделать, это показать часть одного PNG в UIImageView. Есть два способа:

Первый:

UIImage *image = [UIImage imageNamed:@"clothing.png"]; 
CGImageRef imageRef = CGImageCreateWithImageInRect(image, rect); 
self.imageview.image = [UIImage imageWithCGImage:imageRef]; 

Второй:

self.imageview2.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]);//way2 
self.imageview2.layer.contentsRect = rect; 

Какой из них лучше? Зачем? Благодаря!

+0

Первый вариант лучше второго. –

+0

Если ориентация 'UIImage' не' UIImageOrientationUp', вы можете получить другой результат. – KudoCC

+0

Вы можете увидеть мое редактирование. – AnthoPak

ответ

0

Конечно лучший способ это первая одна:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

В самом деле, это путь UIImageView построен для.

Для пояснения каждый вид (UIView, UIImageView и т. Д.) Имеет свойство .layer, чтобы добавить на него визуальный контент. Здесь вы добавляете в него изображение. Вы могли бы добиться того же результата с одного UIView. Но в условиях исполнения и ясности вы должны (должны) использовать .image.

Edit:

Даже с новым редактирования, первый вариант еще лучше один.

0

Первый:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

С помощью этого можно напрямую присвоить изображение любому UIImageView Хотя в

Второй:

self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]); 

Вы не можете назначить изображение непосредственно к слою. поэтому вам нужно поместить CGImage в слой.

Итак, сначала лучше навсегда. Спасибо.

0

Первый вариант лучше, концепция моста используется до введения АРК

0

Вы можете сделать это, но это ваша ответственность, чтобы изменить изображение, чтобы сделать image.CGImage рисовать правильно по отношению к imageOrientation, contentMode и так далее. Если вы установили изображение с imageView.image = image;, это ответ на яблоко.

Я приведу вам пример, который вызывает проблему: как image.CGImage не содержит ориентацию изображения, поэтому, если вы установите его непосредственно, и если исходное изображение не UIImageOrientationUp, изображение будет вращаться, если вы «не исправить ориентация "исходного изображения, подобного этому. (Вы можете получить изображение, которое не UIImageOrientationUp, просто взять фото с iPhone)

- (UIImage *)fixOrientation { 
    if (self.imageOrientation == UIImageOrientationUp) return self; 

    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); 
    [self drawInRect:(CGRect){0, 0, self.size}]; 
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return normalizedImage; 
} 

Вот два снимок экрана, первый набор image.CGImage непосредственно layer.contents, второй набор изображений к imageView.image. enter image description here enter image description here

Так всегда использовать imageView.image, если вы не знаете, что вы делаете.

Смежные вопросы