0

私はあまり上手なプログラマーではないので、これがばかげた質問だったら許してください! 私はiosで画像変換を学んでいます。ボタンクリックイベントで画像をある位置から別の位置に変換したいのですが、コードは次のとおりです...

- (IBAction)showinfobybutton:(id)sender {
    CGFloat v1 = imageview.center.x;
    CGFloat v2 = imageview.center.y;
    CGAffineTransform trans = CGAffineTransformTranslate(imageview.transform, v1, v2);
    imageview.transform = trans; 
}

コードの何が問題なのですか。x方向ではなくy方向にのみ移動します。v1関数の値をいくら入れても気にしません。何が起こっているのかわかりません.....私は完全に立ち往生しています助けてくれてありがとう

4

1 に答える 1

5

に関するあなたの質問に関してCGAffineTransform、いくつかの考えがあります:

  1. initメソッドでこれを行っていますかviewDidLoad?その場合、 ( などの) のUIView関連プロパティの多くはその時点で信頼できないため、ビュー作成プロセスの初期段階にある可能性があります。を見て、との値がゼロでないことを確認してください。フレーム座標などを見たい場合は、それまで延期することをお勧めします。imageviewcenterv1v2viewDidAppear

  2. 自動レイアウトを使用していますか?ストーリーボードまたは NIB を開き、ドキュメントのプロパティ (以下) を確認します。画面上で物を動かしている場合は、オフにすることをお勧めします。

    ここに画像の説明を入力

  3. 余談ですが、あなたの設定v1v2ベースにあるcenterimageviewが気になります。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いずれかを変更することです。次に例を示します。centerframe

[UIView animateWithDuration:1.0
                 animations:^{
                     imageview.center = CGPointMake(newX, newY); // set newX and newY to whatever you want
                 }];

自動レイアウトを使用している場合、プロセスはもう少し複雑になります。自動レイアウトの 1 つの手法は、プログラムで制約を変更することですが、それはおそらくこの質問の範囲を超えています。

于 2013-02-06T14:32:49.350 に答える