web-dev-qa-db-ja.com

UIImageViewの画像の位置を設定することは可能ですか?

より大きな画像を表示するUIImageViewがあります。中央に配置されているように見えますが、その画像をそのUIImageView内に移動したいと思います。私はAppleの MoveMe サンプルを見ましたが、彼らがどのようにそれを行うのか理解できませんでした。そのためのUIImageViewさえ持っていないようです。何か案は?

16
Thanks

元の回答は、iOS4のCoreAnimationに置き換えられました。

つまり、Gold Thumbが言うように、UIViewのCALayerにアクセスすることでこれを行うことができます。具体的にはそのcontentRect:

Apple Docs から:使用する必要があるレイヤーのコンテンツの部分を定義する、単位座標空間内の長方形。アニメート可能。

19
Rog

必要なものは次のようなものです(たとえば、元の画像の左上隅の30%x 30%を表示する):

imageView.layer.contentsRect = CGRectMake(0.0, 0.0, 0.3, 0.3);

「contentsRect」の説明:使用する必要があるレイヤーのコンテンツの部分を定義する、単位座標空間内の長方形。

26
Golden Thumb

IImageView内に含まれるように画像を表示しますか?その場合は、UIImageViewのcontectModeをUIViewContentModeScaleToFill(アスペクト比が重要でない場合)またはUIViewContentModeScaleAspectFit(アスペクト比を維持したい場合)に変更するだけです。

IBでは、これはインスペクターでモードを設定することで実行できます。

コードでは、次のように実行できます

yourImageView.contentMode = UIViewContentModeScaleToFill;

IImageView内に大きな画像をそのまま表示したい場合これを行うための最良かつ最も簡単な方法は、UIScrollView内に画像ビューを配置することです。そうすれば、画像をズームインおよびズームアウトしたり、画像を移動したりできるようになります。

お役に立てば幸いです。

12
lostInTransit

MoveMeサンプルがあなたが望むようなことをするようには聞こえません。その中のPlacardViewは、使用されている画像と同じサイズです。これに対して行われる唯一のサイズ変更はビュー変換であり、画像のビューポートには影響しません。私が理解しているように、あなたは大きな写真を持っていて、それに小さなビューポートを表示したいと思っています。これを行うための単純なクラスメソッドはありませんが、目的の結果を取得するために使用できる関数があります。CGImageCreateWithImageInRect(CGImageRef、CGRect)が役立ちます。

これを使用した短い例を次に示します。

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);
4
HitScan

どうもありがとう。私は次のような非常に単純な解決策を見つけました:

CGRect frameRect = myImage.frame;
CGPoint rectPoint = frameRect.Origin;
CGFloat newXPos = rectPoint.x - 0.5f;
myImage.frame = CGRectMake(newXPos, 0.0f, myImage.frame.size.width, myImage.frame.size.height);

フレームを動かすだけです。そのフレームの一部がiPhoneのビューポートから出てしまうことがありますが、これはそれほど重要ではないことを願っています。その上にマスクがあるので、変に見えません。ユーザーは、それがどのように行われるかを気にしません。

3
Thanks