質問: Xcode 9.4.1(Swift 4.1)を使っています。 UIImageViewで画像を表示させていますが、storyboard上よりcontent ModeをAspect Fillにして、まずUIImageViewいっぱいに最大化させます。そして、上下のはみ出た部分は表示させたくはないので、Clip to Boundsにチェックします。 しかし、画像が上下中央になっています。下の画像は見切れて表示されなくてもいいので、上揃い(画像上部が見えるように)配置したいと思っています。 どのように指定すればいいのでしょうか。 ご存知の方、ご教示お願いします。
回答: ユーティリティメソッド的で申し訳ないですが、以下のようにUIImageViewにセットする画像をあらかじめ切り抜くコードを挟めばできます。 ``` /// imageに指定された画像をtoSetImgViewに収まるようにクリップしてからセットする /// - parameter image: UIImageViewにセットしたい画像 /// - parameter toSetImgView: 画像をセットしたいUIImageViewのインスタンス func setResizedImageToUIImageView(image:UIImage, toSetImgView:UIImageView) { let cImg:CGImage? = image.cgImage; if(cImg == nil) { return } //画像がうまく表示できるように画像を切り抜き let imgRef:CGImage? = cImg?.cropping(to: CGRect(x:0, y:0,width:image.size.width, height:toSetImgView.frame.size.height * image.size.width / toSetImgView.frame.size.width)) if(imgRef == nil) { return } let newImg = UIImage(cgImage: imgRef!, scale: image.scale, orientation: image.imageOrientation) toSetImgView.image = newImg } ``` 本当はUIImageViewを継承してKVOでやりたかったのですがSwiftは不慣れなものでうまくいきませんでした。(たぶんSwift的には拙いコードになっていると思います。) KVOでimageプロパティが変更されたことの通知を受け取れれば、上記処理をそこで呼び出すことでもっとスマートにできると思います。