

Xcode 9.4.1(Swift 4.1)を使っています。  
UIImageViewで画像を表示させていますが、storyboard上よりcontent ModeをAspect
Fillにして、まずUIImageViewいっぱいに最大化させます。そして、上下のはみ出た部分は表示させたくはないので、Clip to
Boundsにチェックします。

しかし、画像が上下中央になっています。下の画像は見切れて表示されなくてもいいので、上揃い（画像上部が見えるように）配置したいと思っています。

どのように指定すればいいのでしょうか。  
ご存知の方、ご教示お願いします。


CC BY-SA 4.0
2018-08-20T04:37:42.020
47647
2020-09-07T09:05:25.420
8593
question
swift uiimageview
UIImageViewの画像をアスペクトを保ちながら最大にして上から表示させるには


ユーティリティメソッド的で申し訳ないですが、以下のようにUIImageViewにセットする画像をあらかじめ切り抜くコードを挟めばできます。

[code]

    /// 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
    }
    
[/code]

本当はUIImageViewを継承してKVOでやりたかったのですがSwiftは不慣れなものでうまくいきませんでした。(たぶんSwift的には拙いコードになっていると思います。)  
KVOでimageプロパティが変更されたことの通知を受け取れれば、上記処理をそこで呼び出すことでもっとスマートにできると思います。


CC BY-SA 4.0
2018-08-20T08:09:38.963
47660
2018-08-20T08:09:38.963
17014
47647
answer