這是一個奇怪的問題。我有創造與需要動畫,以免鍵盤時,將顯示一些文本字段創建新用戶的iPhone視圖控制器,即認爲動畫上下保持鍵盤的頂部和下部邊緣之間的最小間隙文本字段。當它從登錄現有用戶屏幕(故事板中的初始視圖控制器)以模態方式呈現時,工作正常。self.view.frame不再當動畫故事板中的初始視圖控制器
於是我決定改變應用一下,讓登錄/創建用戶意見將屬於同一個視圖控制器。他們過渡如此:
if(accountCreateView == nil) {
UINib *nib = [UINib nibWithNibName:@"NewAccountView" bundle:nil];
NSArray *nibViews = [nib instantiateWithOwner:self options:nil];
accountCreateView = [nibViews objectAtIndex:0];
}
[UIView transitionFromView:(displayingLoginView ? loginView : accountCreateView)
toView:(displayingLoginView ? accountCreateView : loginView)
duration:0.6
options:(displayingLoginView ?
UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingLoginView = !displayingLoginView;
}
}
];
這工作得很好。但是,執行視圖動畫的代碼不會。當文本字段變爲活動狀態時,將調用檢查文本字段與鍵盤接近程度的代碼,但在執行動畫塊時不會發生任何情況。
所以我檢查:
if([UIView areAnimationsEnabled])
NSLog(@"Animations are enabled");
else
NSLog(@"Animations are disabled");
的動畫肯定啓用。
所以我把它背進一步viewDidLoad中,嘗試一個簡單的動畫,看看有什麼工作,先天下之憂:
CGRect viewFrame = loginNameTextField.frame;
viewFrame.origin.y = 400.f;
[UIView animateWithDuration:1.f
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
loginNameTextField.frame = viewFrame;
}
completion:NULL];
這工作得很好!文本字段在窗口中緩慢移動。
這什麼都不做,那就是混淆的部分:從self.view.frame設置時
CGRect viewFrame = self.view.frame;
viewFrame.origin.y = 400.f;
[UIView animateWithDuration:1.f
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
self.view.frame = viewFrame;
}
completion:NULL];
viewFrame有起源0,20和大小320460預期。
我試過直接設置框架屬性:
CGRect viewFrame = self.view.frame;
viewFrame.origin.y = 400.f;
self.view.frame = viewFrame;
貌似我可以改變self.view的子視圖的框架,但不是self.view。修復程序可能是離開初始視圖控制器作爲故事板空白視圖以及兩者的登錄視圖中創建xibs和創建用戶視圖,並加載它們在viewDidLoad中 - 但爲什麼呢?
編輯:是的,切換視圖控制器的故事板版本到一個普通的空視圖和加入含有從作爲一個子視圖確實使動畫重新工作一個XIB實際UI的圖。儘管如此,仍然不知道爲什麼。
這是一個好主意,我可以看到它是方便,自動滾動(或更改表的框架,然後用scrollToRowAtIndexPath),但認爲是比這一點更復雜爲什麼我需要轉移包含的視圖。 – 2012-02-01 22:14:32
好的。我想我也會添加到我的帖子中,在某些情況下,它也有助於在UITableView中具有頁眉和頁腳視圖。如果有幫助,你可以在這些地方放置更復雜的東西。當然,這限制了你將艱難的東西放在桌子視圖的頂部和底部,這可能不是你想要的,這取決於你的設計。 – Rob 2012-02-02 10:40:57