UIImageViewのcontentModeプロパティで遊んでいます。
UIViewContentModeScaleAspectFillに設定すると、画像は画面に合わせて拡大縮小されます。中央に配置されています。そのため、画像の左右(または画面の向きによっては上下)の部分がクリップされます。
同じ振る舞いをしたいのですが、中心に置かないでください。右側(または左側)でのみ画像をクリップすることは可能ですか?(これも向きに応じて上または下)?
ありがとう
UIImageViewのcontentModeプロパティで遊んでいます。
UIViewContentModeScaleAspectFillに設定すると、画像は画面に合わせて拡大縮小されます。中央に配置されています。そのため、画像の左右(または画面の向きによっては上下)の部分がクリップされます。
同じ振る舞いをしたいのですが、中心に置かないでください。右側(または左側)でのみ画像をクリップすることは可能ですか?(これも向きに応じて上または下)?
ありがとう
2月からしばらく経ちましたが、開発中のアプリで同じニーズに遭遇しました。
既存のコードに簡単に統合できるカスタムUIImageViewを使用して解決しました(これはUIImageViewのドロップイン置換です)。
このクラスは、例とともにgithubにあります: https ://github.com/reydanro/UIImageViewAligned
これがあなたの次のプロジェクトに役立つことを願っています
これを行うiOSの方法は、UIImageViewのレイヤーのcontentsRectを操作することです。次の例(私のカスタムUIImageViewサブクラス)を考えて、(デフォルトの中央ではなく)左または右に配置します。
- (void)updateImageViewContentsRect {
CGRect imageViewContentsRect = CGRectMake(0, 0, 1, 1);
if (self.image.size.height > 0 && self.bounds.size.height > 0) {
CGRect imageViewBounds = self.bounds;
CGSize imageSize = self.image.size;
CGFloat imageViewFactor = imageViewBounds.size.width / imageViewBounds.size.height;
CGFloat imageFactor = imageSize.width / imageSize.height;
if (self.alignmentMode == AHTImageAlignmentModeLeft) {
if (imageFactor > imageViewFactor) {
CGFloat scaledImageWidth = imageViewBounds.size.height * imageFactor;
CGFloat xOffset = (scaledImageWidth - imageViewBounds.size.width) / 2;
imageViewContentsRect.origin.x = -(xOffset / scaledImageWidth);
} else if (imageFactor < imageViewFactor) {
CGFloat scaledImageHeight = imageViewBounds.size.width / imageFactor;
CGFloat yOffset = (scaledImageHeight - imageViewBounds.size.height) / 2;
imageViewContentsRect.origin.y = -(yOffset / scaledImageHeight);
}
} else if (self.alignmentMode == AHTImageAlignmentModeRight) {
if (imageFactor > imageViewFactor) {
CGFloat scaledImageWidth = imageViewBounds.size.height * imageFactor;
CGFloat xOffset = (scaledImageWidth - imageViewBounds.size.width);
imageViewContentsRect.origin.x = (xOffset / scaledImageWidth) / 2;
} else if (imageFactor < imageViewFactor) {
CGFloat scaledImageHeight = imageViewBounds.size.width / imageFactor;
CGFloat yOffset = (scaledImageHeight - imageViewBounds.size.height);
imageViewContentsRect.origin.y = (yOffset / scaledImageHeight) / 2;
}
}
}
self.layer.contentsRect = imageViewContentsRect;
}