に関するあなたの質問に関してCGAffineTransform
、いくつかの考えがあります:
init
メソッドでこれを行っていますかviewDidLoad
?その場合、 ( などの) のUIView
関連プロパティの多くはその時点で信頼できないため、ビュー作成プロセスの初期段階にある可能性があります。を見て、との値がゼロでないことを確認してください。フレーム座標などを見たい場合は、それまで延期することをお勧めします。imageview
center
v1
v2
viewDidAppear
自動レイアウトを使用していますか?ストーリーボードまたは NIB を開き、ドキュメントのプロパティ (以下) を確認します。画面上で物を動かしている場合は、オフにすることをお勧めします。
余談ですが、あなたの設定v1
とv2
ベースにあるcenter
のimageview
が気になります。center
の量だけ を移動していますcenter
。通常、次のようなものが表示されます。
CGFloat dx = 100.0;
CGFloat dy = 200.0;
[UIView animateWithDuration:1.0
animations:^{
CGAffineTransform trans = CGAffineTransformTranslate(self.someView.transform, dx, dy);
imageview.transform = trans;
}];
ところで、(a) アニメーション化するのは、多くの場合、ユーザー エクスペリエンスが向上するためです。(b) このような診断を行うと、何から何に変化しているかを簡単に確認できます。アニメーションが必要ない場合は、明らかにanimateWithDuration
コードを使用しないでください。
ところで、UIView
コントロールを移動したい場合、autolayout を使用していない場合、最も一般的な方法は を使用してまたは のanimationWithDuration
いずれかを変更することです。次に例を示します。center
frame
[UIView animateWithDuration:1.0
animations:^{
imageview.center = CGPointMake(newX, newY); // set newX and newY to whatever you want
}];
自動レイアウトを使用している場合、プロセスはもう少し複雑になります。自動レイアウトの 1 つの手法は、プログラムで制約を変更することですが、それはおそらくこの質問の範囲を超えています。