私は別のUIViewの上にUIViewを持っていますが、1つ、2つ、3つのタップでUITapGestureRecognizerにのみ応答するようにしたいのですが、他のイベントは下のUIViewに渡されますそれ。下のビューにはUIPinchGestureRecognizerとUIPanGestureRecognizerがありますが、タッチのいずれかがトップUIViewにある場合は機能しません。トップUIViewをuserInteractionEnabledにNOに設定すると正しく動作しますが、もちろんトップUIViewからタップを取得できません。すべてのヒントを高く評価しています。UIViewが特定のイベントを通過する
4
A
答えて
0
私はTouchesサンプルで微調整しました。これが正しい方法であるかどうかは分かりません。
これは両方のビュー(topViewとbottomView)でView Controllerで行われます。私はトップビューにすべてのジェスチャー認識機能を追加するのviewDidLoadで
-
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureCaught)];
[tapGesture setDelegate:self];
[topView addGestureRecognizer:tapGesture];
[tapGesture release];
panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panBottomView)];
[panGestureRecognizer setMaximumNumberOfTouches:2];
[panGestureRecognizer setDelegate:self];
[topView addGestureRecognizer:panGestureRecognizer];
[panGestureRecognizer release];
pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scaleBottomView)];
[pinchGesture setDelegate:self];
[topView addGestureRecognizer:pinchGesture];
[pinchGesture release];
ジェスチャーアクション
- (void)panBottomView
{
UIView *piece = bottomView; //Hardcoded because the pan gesture to be applied only on the bottom view.
[self adjustAnchorPointForGestureRecognizer:panGestureRecognizer];
if ([panGestureRecognizer state] == UIGestureRecognizerStateBegan || [panGestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [panGestureRecognizer translationInView:[piece superview]];
[piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
[panGestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
// scale the piece by the current scale
// reset the gesture recognizer's rotation to 0 after applying so the next callback is a delta from the current scale
- (void)scaleBottomView {
[self adjustAnchorPointForGestureRecognizer:pinchGesture];
if ([pinchGesture state] == UIGestureRecognizerStateBegan || [pinchGesture state] == UIGestureRecognizerStateChanged) {
bottomView.transform = CGAffineTransformScale([bottomView transform], [pinchGesture scale], [pinchGesture scale]);
[pinchGesture setScale:1];
}
}
- (void) tapGestureCaught {
//Do stuff for the topView
}
// scale and rotation transforms are applied relative to the layer's anchor point
// this method moves a gesture recognizer's view's anchor point between the user's fingers
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
/*You can put if conditions based on the class of gestureRecognizer for furthur customization. For me this method was not called for any gesture on the TOPVIEW. So i have sort of harcoded the following line*/
UIView *piece = bottomView;
CGPoint locationInView = [gestureRecognizer locationInView:piece];
CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
piece.layer.anchorPoint = CGPointMake(locationInView.x/piece.bounds.size.width, locationInView.y/piece.bounds.size.height);
piece.center = locationInSuperview;
}
}
私は完全にすべてのコードをテストしていません。それを試して、それが動作するのを見てください。
関連する問題
- 1. touchのイベントを通り過ぎるアプリケーション
- 2. 特定のアクションを何通り通過するか不明確<T,R>
- 3. GPSトラッキングデータの低速通過クラスタの特定
- 4. 通過が
- 5. 特定のイベントでユーザーに通知する方法は?
- 6. アプリケーションレベルのイベントを通過するTIBlobが受信側でNULLになる
- 7. UIView renderInContex特定の位置
- 8. GtkOverlayが入力イベントを通過しない
- 9. 線分が通過する八角形を決定する
- 10. テーブルビューのデータがモデルクラスを通過する
- 11. カスタムUIViewのイベント
- 12. パブリックチャンネルでの特定のイベントの通知を取得
- 13. UIViewラウンドの特定のコーナーを作成
- 14. データがajaxリクエストを通過する
- 15. アレイは、Ajaxを通過するが
- 16. パーティクルがお互いを通過する
- 17. チャットヘッドがクリックイベントを通過[Android]
- 18. ファイルを通過する
- 19. セレクタを通過するパラメータ
- 20. UIViewのイベントとガーベジコレクション
- 21. 通過/
- 22. のpython通過
- 23. 2つの特定のイベントが発生したときのイベントハンドラへの通知
- 24. このメカニズムは、レイヤー間を通過する特定のメッセージを使用するのに便利ですか?
- 25. 'onscroll'イベントのソースを特定する
- 26. 特定のイベントでアプリケーションをリセットする
- 27. 過去に既に発生したイベントのローカル通知
- 28. 特定の時間が経過した後にXcode通知をトリガーする(スウィフト3)
- 29. SELECT SQLクエリで特定の列を通過させる必要がありますか?
- 30. 経過イベントv Tickイベント?