[英]UIView animation doesn't work first time
我在導航欄中有一個seachButton,當點擊以下方法時會調用它:
- (IBAction)search:(id)sender
{
if (nil == searchViewController)
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
searchViewController.view.backgroundColor = [UIColor clearColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
forView:searchViewController.view
cache:NO];
[self.view addSubview:searchViewController.view];
[UIView commitAnimations];
}
它應該加載SearchViewController.xib,其中包含帶有UISearchBar和兩個按鈕的視圖。 當我第一次調用搜索方法時,帶有一些奇怪動畫的視圖會很快出現,而當我再次調用它時,動畫就可以了。 有人知道什么地方可能出問題嗎?
將兩個視圖添加到appdelegate中的窗口中,我遇到了與您相同的問題,並且可以正常工作。 奇怪,因為稍后我將其從超級視圖中刪除,但它仍在工作。
在調用view方法之前,UIViewController不會加載其視圖。 我猜問題是第一次調用動畫時視圖未加載。 您可以嘗試修改您的代碼,如下所示:
if (nil == searchViewController) {
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
searchViewController.view;
}
嘗試將動畫代碼放入viewDidLoad函數中。 這樣可以確保nib文件中的所有資產和視圖均已加載,並且可以被您的應用使用。
- (IBAction)search:(id)sender
{
if (nil == searchViewController)
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
[self.view addSubview:searchViewController.view];
}
-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
forView:self.view
cache:NO];
[UIView commitAnimations];
}
嘗試將用於動畫和視圖加載的代碼放在viewDidAppear:
方法中,而不是viewDidLoad:
(克里斯在上面建議)。
通常,在viewDidLoad:
執行視圖相關的操作時遇到問題。 但是在viewDidAppear:
執行這些操作總是有幫助的(我可能會遺漏一些導致此行為的細微差別)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.