1

UIPanGestureRecognizer があります。それは正常に動作します。if ステートメントを作成したので、誰かが写真に触れるとアルファ 0.7 になり、1.5 倍大きくなります。アルファは問題なく動作しますが、CAAffineTransformMakeScale メソッドを入力すると、画像が動きません。

これは私のコードです:

- (IBAction)Bloemen:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                     recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

     if (UIGestureRecognizerStateBegan)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelay:0.1];
        [UIView setAnimationDuration:0.4];

        bloemen.alpha = 0.7f;
        bloemen.transform = CGAffineTransformMakeScale(1.5,1.5);

        [UIView commitAnimations];
     }
    if (UIGestureRecognizerStateEnded) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelay:0.1];
        [UIView setAnimationDuration:0.1];

        bloemen.alpha = 1.0f;
        bloemen.transform = CGAffineTransformIdentity;

       [UIView commitAnimations];
   }
}
4

1 に答える 1

0

重大な問題は、ifステートメントがstateプロパティをチェックしていないことです。そのはず:

if (recognizer.state == UIGestureRecognizerStateBegan)
{
    // began code here
}
else if (recognizer.state == UIGestureRecognizerStateEnded)
{
    // ended code here
}

また、このジェスチャ認識機能は、自動レイアウトがオフになっている場合にのみ機能することに注意してください。自動レイアウトを使用している場合は、制約を変更する必要があります。


あなたが文体的な観察を許してくれるなら、私はまた提案する傾向があるかもしれません:

  • ブロックベースのアニメーションを使用します。

  • 不要な場合は非ローカル変数を参照しない (つまり、recognizer.viewではなく参照)。これにより、このジェスチャを追加するために選択したbloemenさまざまなオブジェクトをドラッグ アンド ドロップするために、このハンドラーを再利用しやすくなります。UIView

  • 標準の命名規則を使用し、メソッド名を小文字で開始し、verbNoun規則に従います。

これはどれも重要ではなく、必要に応じて使用または無視してください。ただし、いくつかのベスト プラクティスが示されています。

- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{    
    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        [UIView animateWithDuration:0.4
                              delay:0.0  // you had 0.1, but seems worthwhile to give immediate feedback
                            options:0
                         animations:^{
                             recognizer.view.alpha = 0.7f;
                             recognizer.view.transform = CGAffineTransformMakeScale(1.5,1.5);
                         }
                         completion:nil];
    }
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        [UIView animateWithDuration:0.1
                              delay:0.0  // you had 0.1, but seems worthwhile to give immediate feedback
                            options:0
                         animations:^{
                             recognizer.view.alpha = 1.0f;
                             recognizer.view.transform = CGAffineTransformIdentity;
                         }
                         completion:nil];
    }
}
于 2013-04-23T22:05:41.480 に答える