的問候和敬意鄉親錯位分段控制,我是比較新的目標C & iPhone編程,所以裸跟我如果我忽略了一些東西明顯..在最初的過渡動畫
我創建了一個簡單的應用使用不同的過渡動畫,設置一對分段控件和一個滑塊。
(Flip/Curl), (left/right)| (上/下), (EaseInOut/EaseIn/EaseOut/Linear)
我創建了一個視圖控制器類,超級視圖控制器在兩個子類實例之間切換。
從以下圖像可以看出,第一次切換到第二個實例,而動畫正在發生時,分段控件被破壞;我猜他們沒有句話之後B的時間來徹底劃清自己..
http://img689.imageshack.us/img689/2320/mangledbuttonsduringtra.png
他們沒事,一旦動畫完成,任何後續時間..
如果我指定cache:NO
在setAnimationTransition
它有幫助,但似乎仍然有某種漸進顯示在分段控件中的文本;他們似乎還沒有被預先渲染或初始化正確..(當緩存視圖被轉換到時,肯定有辦法做到這一點,因爲在這種情況下視圖不會改變,應該可緩存。)
我正在基於一本書中的幾本教程構建我的代碼,因此我更新了didReceiveMemoryWarning
以將實例化視圖控制器設置爲零;當我在模擬器中調用內存警告時,我認爲它正在清除另一個視圖,並且它在加載後像第一個轉換一樣,視圖正在轉換爲顯示,就像上面的圖像一樣。
我想它可以'如果包含代碼(對不起,如果它被認爲是垃圾郵件),這基本上是其中的一半,在else
聲明之後有類似的塊,對於第二方存在的情況,切換回第一..:
- (IBAction)switchViews:(id)sender
{
[UIView beginAnimations:@"Transition Animation" context:nil];
if (self.sideBViewController.view.superview == nil) // sideA is active, sideB is coming
{
if (self.sideBViewController == nil)
{
SideAViewController *sBController =
[[SideAViewController alloc] initWithNibName:@"SideAViewController" bundle:nil];
self.sideBViewController = sBController;
[sBController release];
}
[UIView setAnimationDuration:sideAViewController.transitionDurationSlider.value];
if ([sideAViewController.transitionAnimation selectedSegmentIndex] == 0)
{
// flip: 0 == left, 1 == right
if ([sideAViewController.flipDirection selectedSegmentIndex] == 0)
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:self.view
cache:YES];
else
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.view
cache:YES];
}
else
{
// curl: 0 == up, 1 == down
if ([sideAViewController.curlDirection selectedSegmentIndex] == 0)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
forView:self.view
cache:YES];
else
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
forView:self.view
cache:YES];
}
if ([sideAViewController.animationCurve selectedSegmentIndex] == 0)
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
else if ([sideAViewController.animationCurve selectedSegmentIndex] == 1)
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
else if ([sideAViewController.animationCurve selectedSegmentIndex] == 2)
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
else if ([sideAViewController.animationCurve selectedSegmentIndex] == 3)
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[sideBViewController viewWillAppear:YES];
[sideAViewController viewWillDisappear:YES];
[sideAViewController.view removeFromSuperview];
[self.view insertSubview:sideBViewController.view atIndex:0];
[sideBViewController viewDidAppear:YES];
[sideAViewController viewDidDisappear:YES];
}
書寫好的乾淨的代碼的任何其他提示或指針也可以理解,我知道我還有很多東西需要學習..
感謝ü烏拉圭回合時, - d