0

にを追加しましUIPanGestureRecognizerUIButton。そして今、ボタンを押した後、指で少しドラッグすると、ボタンが強調表示されなくなります。通常、UIButtonsフレームのかなり外側にドラッグしない限り、UIButtonは強調表示されたままになります。ただし、パンジェスチャレコグナイザを使用すると、少しドラッグしてもボタンの強調表示が停止します。

私のコードには、ボタンの強調表示プロパティをnoに設定するものはありません。パンジェスチャレコグナイザーのアクションセレクター(ボタンをパンするたびに呼び出されるメソッド)のすべてのコードを消去してみました。

また、パンジェスチャレコグナイザーのアクションセレクターでボタンの強調表示プロパティをNOに設定してみました。

この種の作品は、ハイライトが点滅するだけです。パンすると、ハイライト表示が消え、フラッシュのように非常に速く戻ります。したがって、これも機能しません。何か案は?

4

3 に答える 3

4

ジェスチャは、デフォルトで、リンクされているビューのタッチをキャンセルします。したがって、ボタンのタッチがキャンセルされると、強調表示されなくなります。この動作を防ぐcancelsTouchesInViewには、ジェスチャーのプロパティをに設定しますNO

于 2012-08-13T01:34:58.850 に答える
1

これはうまくいくでしょう

-(void) panDetected:(UIGestureRecognizer *) gesture 
{
    if(gesture.state == UIGestureRecognizerStateBegan)
    {
        yourButton.backgroundImageView.image = [UIImage imageNamed:@"your_button_highlited_image.png"];
    }
    else if(gesture.state == UIGestureRecognizerStateChanged)
    {

    }
    else if(gesture.state == UIGestureRecognizerStateEnded)
    {
        yourButton.backgroundImageView.image = [UIImage imageNamed:@"your_button_normal_image.png"];
    }
}
于 2012-08-13T01:25:06.817 に答える
0

私は同じ問題を経験しました。borrrdenは正しいです。これを修正するには、viewControllerをgestureRecognizerのデリゲートに設定し、タッチがIUButton上にある場合はタッチをキャンセルします。まず、プロトコル`UIGestureRecognizerDelegateを.hファイルに追加します。次に、ジェスチャレコグナイザーを作成した後、ViewControllerをそのデリゲートとして設定します。

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(aMethod)];
gestureRecognizer.delegate = self;
[self.view addGestureRecognizer:gestureRecognizer];
[gestureRecognizer release];

最後にshouldReceiveTouch、不要なタッチをオーバーライドしてキャンセルします。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    if ([touch.view isKindOfClass:[UIButton class]]) { //Do not override UIButton touches
        return NO;
    }
    return YES;
}
于 2012-11-07T15:30:46.740 に答える