1

カスタムビュークラスがあります。ビュー コントローラー内で、このビュー オブジェクトにタップ ジェスチャ レコグナイザーを追加します。ここで、タップ ジェスチャのハンドラーで、ビュー クラスの drawRect で取得しようとしているビュー オブジェクトにプロパティを設定しています。さて、驚いたことに、「handleGesture」と「drawRect」でビュー オブジェクトを印刷すると、2 つの異なるオブジェクトが得られます。このため、drawRect 内の if 条件が実行されません。その理由は何ですか?

UIGestureRecognizerStateBegan の状態にはなりません。常に UIGestureRecognizerStateEnded 内に入っています。

// Adding Gesture in my view
 MyCustomView *customView= [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
        [customView addGestureRecognizer:GestureRecognizer];
        [GestureRecognizer release];

// Handling tap on my view
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; {
    MyCustomView *aView= (MyCustomView *)GestureRecognizer.view;
switch (iGestureRecognizer.state) {
    case UIGestureRecognizerStateBegan:
        NSLog(@"Began");
        [aView setNeedsDisplay];
        aView.touchDown = YES;
        break;
    case UIGestureRecognizerStateEnded:    
        NSLog(@"Ended");
        aView.touchDown = NO;
        [aView setNeedsDisplay];
        break;
    default:
        break;
}
}

// Inside my view class
- (void)drawRect:(CGRect)iRect {
    if (self.touchDown) {
// Do something here
}
}
4

1 に答える 1

2

drawRect メソッドを呼び出すものは何もありません。これを直接実行する必要はありませんが、handleGesture メソッドで [aView setNeedsDisplay] を呼び出すと、次の描画サイクルでビューの drawRect が呼び出されます。

于 2012-02-22T21:30:25.460 に答える