【发布时间】:2013-02-15 13:49:29
【问题描述】:
我有一个视图控制器,它的视图包含一个执行动画的UIImageView:
//AnimationViewController::ViewDidLoad event:
var ctlAnimations = new UIImageView();
ctlAnimations.AnimationImages = list.ToArray(); //<--list contains the UIImages
ctlAnimations.AnimationDuration = 1.0 * list.Count;
ctlAnimations.StartAnimating();
this.Add(ctlAnimations);
这非常有效:当我将 AnimationViewController 推送到导航堆栈时,它会显示 UIImage 并为其设置动画。
但现在我需要用自定义动画过渡显示AnimationViewController:
var transition = CATransition.CreateAnimation ();
transition.Duration = 0.3f;
transition.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
transition.Type = CATransition.TransitionFade;
this.View.Layer.AddAnimation (transition, "fade");
//viewController is being pushed with animated=false, because we have a custom animation
base.PushViewController (viewController, false);
this.View.Layer.RemoveAnimation("fade");
这也完美运行,因为新视图使用指定的自定义动画过渡到位。
但是当我使用动画过渡将AnimationViewController 推入堆栈时,它会显示,但动画不会运行。相反,它显示动画的第一帧(列表中的第一张图像),并且不运行它。
因此,关于过渡的某些事情破坏了在新视图控制器中为 UIImage 设置动画的能力,但我根本不知道该怎么做。
更新:我注意到如果我点击 NavigationController 的后退按钮,然后离开后退按钮并松开(所以我实际上并没有返回),动画就会开始玩!
【问题讨论】:
-
- 当您点击
AnimationViewController中的任何按钮时,UIImageView 动画也会开始; -
赏金怎么了?没有获奖吗?
-
还没有,因为没有一个答案让我更接近解决方案。在这种情况下我该怎么办?
-
不确定它是否相关,但我注意到的一件事是您正在立即调用 RemoveAnimation,而不是将其设置为在完成时将其删除。
标签: iphone ios xamarin.ios