2016-06-23 5 views
0

セットUIImageの二つの方法UIImageViewへ:違い=

まず:

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

第二:

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

2つの方法の違いは何ですか?

どれが良いですか?

実際、私がしたいことは、UIImageViewで1つのPNGの一部を表示することです。 2つの方法があります。

まず:

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

第二:優れている1

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がために構築されている方法です。

説明のために、すべてのビュー(UIViewUIImageViewなど)には、視覚的なコンテンツを追加するプロパティーが.layerとなっています。ここにイメージを追加します。単一のUIViewで同じ結果を達成できました。しかし、公演の条件と明確さでは、.imageプロパティを使用する必要があります。

編集:

でもあなたの新しい編集して、最初のオプションはまだ良いです。

0

まず

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

あなたが画像を直接割り当てることはできません。

セカンドにしながら、これはあなたが直接、任意のUIImageViewにあなたのイメージを割り当てることができます使用することにより

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

層にする。 CGImageをレイヤーに配置する必要があります。

だから、ファーストは永遠にベストです。ありがとうございました。

0

最初のオプションは、橋のコンセプトは、あなたがそれを行うことができARC

0

の導入前に使用され、より良いですが、それを作るために画像を修正するためにあなたの責任ですimage.CGImageようにimageOrientationcontentModeとに関して正しく描画します。画像をimageView.image = image;に設定した場合、それを行うのはAppleの責任です。

私はあなたに問題が発生する例を与える:image.CGImageとして は、画像の向きが含まれていないので、あなたはそれを直接設定して、ソースイメージがUIImageOrientationUpでない場合は、「修正しない限り、画像は、回転される場合このようにソース画像の「向き」を調整します。第二は、設定された画像で、最初はlayer.contentsに直接image.CGImageに設定されている、

- (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; 
} 
ここ

2つのスクリーンショットです(あなたは自分のiPhoneで写真を撮る、UIImageOrientationUpない画像を得ることができます) imageView.imageへ。 enter image description here

あなたは何をやっている知っている限りだから、常にimageView.imageを使用enter image description here