[英]How to slide / swipe / screen edge swipe between two UIViews in iOS 7
[英]How to accomplish a “90% slide” between two UIViews
我有一個特定的場景正在嘗試模仿,但是對於Cocoa Touch來說還很陌生,我不確定實現它的最佳方法。 請原諒我缺乏戰術知識; 希望一些明確的闡述會有所幫助。
我想模仿的是:
我正在查看的應用程序特別是Beat 。 以下是其中一個UIView的示例-特別是,請注意底部的“設置”齒輪圖標。
觸摸或滑動該齒輪時,將發生兩個主要的UIView更改:
這是我要完成的基本功能。
實現思路1:單個UIViewController帶有多個UIViews
最初,我考慮使用一個UIViewController來管理“主”視圖和“設置”視圖。 在那種情況下,以適當的方式轉換這些視圖將是相當簡單的事情。
也就是說,這對我來說似乎有些混亂。 根據我兩組功能的健壯性,這是使單個UIViewController重載的秘訣。 您可能會告訴我,這沒關系,但事實並非如此。
實現思路2:自定義容器ViewController中有多個UIViewController
這是我目前要走的路線。 它將兩個離散的功能集分離為單獨的UIViewControllers(包含在Container ViewController中),並通過以下兩種方法在兩者之間進行轉換:
- (void)flipFromViewController:(UIViewController *)fromController
toViewController:(UIViewController *)toController
{
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;
fromController.view.frame = CGRectMake(0.0f, 0.0f, width, height);
toController.view.frame = CGRectMake(0.0f, height, width, height);
[self addChildViewController:toController];
[fromController willMoveToParentViewController:nil];
[self transitionFromViewController:fromController
toViewController:toController
duration:0.5f
options:UIViewAnimationOptionTransitionNone
animations:^(void) {
fromController.view.frame = CGRectMake(0.0f, -(height - 100.0f), width, height);
toController.view.frame = CGRectMake(0.0f, 100.0f, width, height);
}
completion:^(BOOL finished) {
[fromController removeFromParentViewController];
[toController didMoveToParentViewController:self];
}];
}
問題是過渡:它似乎並沒有停止“ 90%的方式”。 盡管我在兩個UIView上的幀調整不應該是“完整的”動作,但看起來它似乎打算完全過渡為“舊”控制器和“新”控制器。
我要指導的地方
我並不是要一個完整的解決方案-您的專業知識將太昂貴了。 :)就是說,由於這還不算新,我希望您能對正確的方法有所了解。 如果可以提供更多信息,請告訴我。
謝謝!
我確實認為您的第二個方法是在正確的軌道上,並且您對使用transitionFromViewController:ToViewController的直覺也是正確的-如果您希望兩個視圖控制器都存在並處於活動狀態,則我不會使用該方法。 因此,我希望齒輪視圖的控制器成為自定義容器控制器的子視圖控制器,然后像您一樣將第二個子窗口添加到屏幕底部。 然后使用animateWithDuration動畫兩個視圖:...最后,動畫應具有所需的內容,並且容器控制器將具有兩個子代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.