3

重複の可能性:
UIViewanimateWithDurationでアニメーション化されている間はUIButtonに触れることができません

UIButtonを左から右にアニメーション化したいのですが、ユーザーがボタンにタッチするとアニメーション化されてイベントが送信されますが、アニメーション化するボタンがイベントを送信しません。私を助けてください、私のプロジェクトはこの時点で停止しています。一部の開発者は私に使用するように提案しました

[UIView animateWithDuration:3
                      delay:0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{
                                myBtn.frame=CGRectMake(0,
                                                       100,
                                                       myBtn.frame.size.width,
                                                       myBtn.frame.size.height);
                              }
                 completion:^(BOOL finished) { NSLog(@"Animation Completed!"); }];

この方法ですが、うまくいきません。どうすればよいですか?

4

3 に答える 3

1

以下の のように、そのボタンへの Tap イベントを取得するには、tapGesture レコグナイザーを使用する必要がありますviewDidLoad

- (void)viewDidLoad

 {
   UITapGestureRecognizer *btnTapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
   btnTapped.numberOfTapsRequired = 1;
   btnTapped.delegate = self;
   [myBtn addGestureRecognizer:btnTapped];//here your button on which you want to add sopme gesture event.
   [btnTapped release];

 [super viewDidLoad];
}

And That's Your Code for animation for the Button use as it .

[UIView animateWithDuration:3
                          delay:0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                                    myBtn.frame=CGRectMake(0, 100, myBtn.frame.size.width, myBtn.frame.size.height);
                                 }
                     completion:^(BOOL finished) {NSLog(@"Animation Completed!");];

以下は、同時認識を許可するデリゲート メソッドです。

  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
   {
      return YES;
   }

 here Above methods   Returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES


   - (void)tapAction:(UITapGestureRecognizer*)gesture
    {
     //do here which you want on tapping the Button..

    }

編集:タッチ ジェスチャを見つけたい場合は、UITapGestureRecognizer の代わりに UILongPressGestureRecognizer を使用し、期間を設定する必要があります。

お役に立てば幸いです。

于 2012-10-15T06:44:17.323 に答える
0

問題は、ボタンが既に最終フレームを取得しており、現在の位置では機能しないことです。

@jrturton は、この質問に対して適切な解決策を提供しています。

基本的に、presentationLayer を操作する touchesBegan: メソッドを実装します。

于 2012-10-15T08:39:35.340 に答える
0

UIButtonアニメーション中は使用できません。次を使用する必要がありますNSTimer

timer = [NSTimer timerWithTimeInterval:.005
                                      target:self
                                      selector:@selector(moveButton)
                                      userInfo:nil
                                      repeats:YES];
                [[NSRunLoop mainRunLoop] timer forMode:NSRunLoopCommonModes];

// you can change the speed of the button movement by editing (timerWithTimeInterval:.005) value

-(void)moveButton{
       button.center = CGPointMake(button.center.x+1,button.center.y);



 if (button.frame.origin.x>=self.view.frame.size.width ) {
        [timer invalidate];
    //The event that will stop the button animation

    }

}
于 2012-10-15T06:34:34.977 に答える