5

特定のいくつかのポイント (ボタンなど) を除いて、画面のすべての領域でのタッチを無効にしたいと考えています。つまり、ボタン以外をタップしたときに「touchesBegan」がまったくトリガーされないようにします。通話中

    self.view.userInteractionEnabled = NO;

タッチを登録しないという望ましい効果がありますが、もちろん、ボタンをタップすることはできません。私は基本的に、画面に5点が触れていても、ボタンが機能することを望んでいます。つまり、すべてのタッチ入力が使い果たされ、ボタンは6番目を表します。

これは可能ですか?

ボタンの下に userInteraction を無効にしてビューを挿入しようとしましたが、ユーザーが画面をタップするとタッチが登録されます。タッチ登録を無効にする唯一の方法は、画面全体 (親 UIView) で無効にすることです。

更新:ジェスチャ認識機能を使用してすべてのタッチ イベントを処理し、条件を満たしていないイベントを無視しようとしました。これが私のコードです:

@interface ViewController : UIViewController <UIGestureRecognizerDelegate>

...

    - (void)viewDidLoad
{
    [super viewDidLoad];
    UIGestureRecognizer *allRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:nil];
    allRecognizer.delegate = self;
    [self.view addGestureRecognizer:allRecognizer];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    CGPoint coords = [touch locationInView:self.view];
    NSLog(@"Coords: %g, %g", coords.x, coords.y);
    if (coords.y < 200) {
    [self ignoreTouch:touch forEvent:nil];
    return TRUE;
}
return FALSE;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"%i touch(es)", [touches count]);
}

ただし、画面はまだタッチを「読み取る」ため、5 本の指を下に置くと、6 本目の指でボタンを押すことはできません...

4

7 に答える 7

3

UIView には、オーバーライドできるメソッドがいくつかあります。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;   // default returns YES if point is in bounds

これにより、 touchBegin およびその他のメソッドを呼び出すことができなくなります。

よろしく。

于 2013-09-05T09:01:21.577 に答える
0

背景として UIScrollView を使用してみましたか? つまり、タッチ イベントを発生させたくない領域です。

UIScrollView はタッチ メソッドを呼び出しません。

于 2013-09-04T07:42:44.197 に答える
0

これには良い解決策があります。インタラクションを非表示にしたい領域が何であれ、その領域の上に透明なボタンを配置します。

于 2013-08-30T09:43:12.380 に答える
0

UIImageViewタッチ イベントを無効にする領域にコントロールを追加できます。サブビューの上部にオブジェクトを追加できUIImageViewますself.view

例 //area -- タッチを無効にしたい領域ですself.view

UIImageView *imageView=[[UIImageView alloc]initWithFrame:area];

[self.view addSubView:imageView];
于 2013-09-03T10:57:04.257 に答える
0

touchDelegate は常にこの方法で呼び出しますが、タッチでタスクを実行している場合は、この方法でタスクを実行できます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *touch = [touches anyObject];

    UIButton *touchObject=(UIButton*)[touch view];

    if ([touchObject isKindOfClass:[UIButton class]])
    {
        //Do what ever you want on button touch
    }
    else{
        return;
    }
}
于 2013-09-09T12:32:58.917 に答える