的问候和敬意乡亲错位分段控制,我是比较新的目标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