1

UIImageView 内で画像をスケーリングしています: UIViewContentModeScaleAspectFill

画像はうまくスケーリングされますが、私の問題は ImageView が UIScrollView 内にあることです。原点を 0,0 に設定しました。これは、私が使用している大部分の画像では問題ありませんが、一部の画像は高さが高く、範囲外に押し出されています。画像をトリミングしたくありません。範囲外の量に基づいて、UIImageView フレームを Y 軸に動的に押し下げたいと思います。

Y 軸/高さの範囲外のものを見つけるにはどうすればよいですか? 貧弱なコード例を許してください。

NSString *ImageURL = [self.detailItem objectForKey:@"job_header"];

        anImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, MAX_HEIGHT, 118)];
        anImage.contentMode = UIViewContentModeScaleAspectFill;
        [anImage setImageWithURL:[NSURL URLWithString:ImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
             //Adjust the frame once the image is loaded
             [self adjustPositions];
        }];

調整位置内:

if (anImage.image.size.height > MAX_HEIGHT) {
    CGRect myFrame = anImage.frame;
    myFrame.origin.y = 100;
    myFrame.origin.y = anImage.frame.size.height / anImage.image.size.height;
    anImage.frame = myFrame;
}

私も使用しています:SDWebImage、これはQが関連しており、私の問題をもう少しよく説明するかもしれません:UIImageView、setClipsToBounds、および私の画像がどのように頭を失っているか

境界をまったく切り取りたくないことに注意してください。境界を保持し、原点を真の (0,0) 位置に移動するだけです。

4

1 に答える 1

0

これは、画像ビューで画像のサイズを計算できる方法です。originalSizeは画像のサイズで、constraintは画像ビューのサイズです。

- (CGSize) size: (CGSize) originalSize constrainedToSize: (CGSize) constraint
{
    CGFloat ratioOriginal = originalSize.width/originalSize.height;
    CGFloat ratioConstraint = constraint.width/constraint.height;

    CGSize resultingSize = CGSizeZero;

    if (ratioConstraint >= ratioOriginal) {
            resultingSize = CGSizeMake(constraint.width, originalSize.height*constraint.width/originalSize.width);
    }else{
            resultingSize = CGSizeMake(constraint.height*originalSize.width/originalSize.height, constraint.height);
    }

    return resultingSize;
}

画像ビューで画像のサイズを取得すると、画像の範囲外の量を計算できます。

于 2013-05-09T15:22:43.343 に答える