1

手動で再現するための最良の方法は何ですか

contentMode = UIViewContentModeScaleAspectFit;

それを使わずに?

アスペクト比に合わせてUIImageView(スクロールビュー内)を拡大縮小する必要があります。画像の上にオーバーレイを描画するには、画像の新しいサイズを知る必要があります。

4

1 に答える 1

3

最近、ImageView 内の画像のフレームを見つけて、その画像にタッチ可能なビューを追加する必要がありました。これが私が行った方法です。

-(void)calculateScaleAndContainerFrame{
    if(!imageView || !image) return;

    CGSize imageSize = image.size;
    CGSize imageViewSize = imageView.frame.size;

    float imageRatio = imageSize.width / imageSize.height;
    float viewRatio = imageViewSize.width / imageViewSize.height;

    if(imageRatio > viewRatio){
        scale = imageSize.width / imageViewSize.width;
    }else{
        scale = imageSize.height / imageViewSize.height;
    }

    CGRect frame = CGRectZero;

    frame.size = CGSizeMake(roundf(imageSize.width / scale), roundf(imageSize.height / scale));
    frame.origin = CGPointMake((imageViewSize.width - frame.size.width) / 2.0, (imageViewSize.height - frame.size.height) / 2.0);

    [container setFrame:frame];
}

imageViewSize をスクロールビュー (または画像を配置するビュー) のコンテンツサイズに置き換えて、ガイドとして使用できると確信しています。

注 1: 私の場合、ビューを垂直方向に中央に配置する必要がありました。そうでない場合は、フレームの原点を設定した行で y を 0 に設定するだけです。画像を水平方向に中央揃えにしたくない場合は、x についても同じです。

注 2: これは決して、プロジェクトにプラグインして作業できるコードではありません。おそらくそれを読んで理解し、そのメソッドを自分のプロジェクトに適用する必要があります。今はあなたのニーズに合わせて修正する時間がありません。

注 3: そのコードを使用して、そのコンテンツ モードを使用する画像ビュー内の画像を完全に表示することができたので、機能します。

于 2012-05-21T20:10:33.927 に答える