2016-08-03 7 views
0

THIS LIBボタンを使用しています。これで、ビューコントローラーがコンテナビューになりました。このコンテナビューにはPageViewController(第2ページViewController)にはBFPaperButton(onTapジェスチャのリップルアニメーションがあります)があります。アニメーションはこの設定では機能しませんが、第2ページのViewControllerをIs Initial View Controllerとすると、アニメーションは完全に動作します。ここで何が起こっていますか?ジェスチャーからトリガーされたアニメーションは、PageViewControllerの子ビューでは機能しません。

EDIT

私は問題をさらに孤立、PageViewControllerを使用してPageViewControllerのデータソースデリゲートメソッドのいずれかでボタンを含むのViewControllerを返すときに、これはのみ発生思わ

、それその理由がもっとも間違いなくPageViewControllerであるように見えますが、それはいくつかのジェスチャー認識子をブロックしているか、子ビューのためにそれらを遅らせているように見えます。

+0

私はこれを解決しました。質問には – Bhargav

+0

にお答えしたいと思います。あなたのコードを読んでください。しかし、[問題を再現できるコードや情報がない限り]サポートはできません(http://stackoverflow.com/help/mcve)。それ以外の場合、私たちはただ盲目的に推測しています。あなたの問題を解決しただけではそれを再オープンするには不十分であることに注意してください - 実際にMCVEを提供する必要があります。 –

+0

@Kyll私はすでに問題を解決しましたので、私はそれに答えることができるように質問を再開します: – Bhargav

答えて

0

子ビューのコンテンツの接触を遅らせる特定のタイプの親ビューを扱うときには、あなたが記述する効果がかなり一般的です。ソリューションは通常、親ビューのプロパティを設定するだけで簡単です:delaysContentTouches

私はこれを覚えています.10のうち9回、これが原因です。

しかし、UIPageViewControllerの場合、デフォルトの動作はUIQueuingScrollViewで、そのプロパティは公開されません。これを回避するには醜いしかし効果的な方法は、あなたのUIPageViewControllerのサブビューを掘り起こして、UIGestureRecognizersがあり、delaysTouchesBegan = NOと設定されているものになるまでです。 、

githubのユーザー bfeherによって回答
let subViews: [UIView] = pageViewController.view.subviews 
var viewHierarchy: [UIView] = [pageViewController.view] 
viewHierarchy.appendContentsOf(subViews) 
var i = 0 
for viewToCheck in viewHierarchy { 
    viewToCheck.gestureRecognizers?.forEach { (recognizer) in 
     print("viewToCheck isa \'\(viewToCheck.self)\'") 
     for gestureRecognizer in viewToCheck.gestureRecognizers! { 
      print("\(i) gestureRecognizer: \(gestureRecognizer)") 
      i += 1 
      gestureRecognizer.delaysTouchesBegan = false 
      } 
    } 
} 

:あなたがここにあなたのUIPageViewController

NSArray *subviews = self.pageViewController.view.subviews; 
NSArray *viewHierarchy = [@[self.pageViewController.view] arrayByAddingObjectsFromArray:subviews]; 
int i = 0; 
for (UIView *viewToCheck in viewHierarchy) { 
    for (UIGestureRecognizer *gestureRecognizer in viewToCheck.gestureRecognizers) { 
     NSLog(@"%d gestureRecognizer: %@", i++, gestureRecognizer); 
     gestureRecognizer.delaysTouchesBegan = NO; 
    } 
} 

を初期化した後、あなたは、単にこのコードを実行することによってこれを行うことが

は一緒にあなたが好むならスウィフトバージョンを素早く課されますfor this issue

関連する問題