切り替えたいビューではなく、スーパービューでタッチを処理する必要があります。これにより、タッチイベントを失うことなくビューを切り替えることができます。あなたがこれを行うときに、タッチが切り替わって特定のサブビューで発生しているかどうかを自分でテストする必要があります。これは、多くの方法を行うことができますが、ここではあなたが始めるためにいくつかの方法があります:別のビューにRects /ポイントを変換
:ポイントを考慮して配置されている場合ここで
[view convertRect:rect toView:subview];
[view convertPoint:point toView:subview];
をテストするためにいくつかの方法であります:
[subView hitTest:point withEvent:nil];
CGRectContainsPoint(subview.frame, point); //No point conversion needed
[subView pointInside:point withEvent:nil];
一般に、UIGestureRecognizersを使用する方が良いです。たとえば、UIPanGestureRecognizerを使用していた場合は、ジェスチャ認識ツールが呼び出せるメソッドを作成し、そのメソッドで作業を行います。たとえば:
- (void) viewPanned:(UIPanGestureRecognizer *)pan{
if (pan.state == UIGestureRecognizerStateBegan){
CGRect rect = subView.frame;
newView = [[UIView alloc] initWithFrame:rect];
[subView removeFromSuperview];
[self addSubview:newView];
} else if (pan.state == UIGestureRecognizerStateChanged){
CGPoint point = [pan locationInView:self];
newView.center = point;
} else {
//Do cleanup or final view placement
}
}
その後、ターゲット(通常は自己)に代入し、それを追加し、認識器を初期化:
[self addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewPanned:)]];
今(それはサブビューのマネージングスーパーだろう)、自己が対応させていただきます動きをパンする。
その理由はわかりません。コードを投稿できますか?ところで、UIGestureRecognizerの使用を止めているのは何ですか?ほとんどの場合、私はTouchesの使用を検討しましたが、既存のUIGestureRecognizerまたはUIGestureRecognizerのサブクラス化がうまく機能することを確認しました(再利用できます)。 –
在庫UIPanGestureRecognizerを使用している場合、 'touchesBegan'はあなたのコードに含まれるべきではありません。 ' - (void)viewPanned:(UIPanGestureRecognizer)pan'のようにターゲットメソッドをいくつか設定する必要があります。レコグナイザを起動すると、ターゲットを設定します: '[[UIPanGestureRecognizer alloc] initWithTarget:自己アクション:@selector(viewPanned :)]'。そのメソッドは繰り返し呼び出され、状態をチェックして適切なアクションを実行できます: 'If(pan.state == UIGestureRecognizerStateBegan){.......}'または 'If(pan.state == UIGestureRecognizerStateChanged { ....} 'など... –
私はこれを反映するために私の答えを広げました –