我试图制作一个动画,其中红色脉冲在屏幕上,当点击屏幕时,脉冲的速度会增加。现在我有两个问题。一个是动画没有出现,第二个是动画必须加速而不重新开始动画。我想让动画从点击屏幕时的任何一点加速。
public class Animal
{
public virtual void Jump()
{
Console.WriteLine("Jump.");
}
}
public class Animal<T> : Animal where T : AnimalDefinition
{
public override void Jump()
{
//you can override Jump here if you want to
}
}
public class Dog : Animal<DogDefinition> {}
public class Cat : Animal<CatDefinition> {}
答案 0 :(得分:0)
我第一次没有仔细阅读这篇文章。
你在核心动画和UIView动画方面有一个奇怪的组合。这两者存在于不同层面。核心动画将允许您为视图上的属性设置动画(例如它的背景颜色)。
UIView动画构建于Core Animation之上,通过构建基础Core动画,可以更轻松地自动为视图更改设置动画。
您在创建CABasicAnimation
时开始使用Core Animation,但是您有一个函数pulseAnimation
,它看起来正在使用UIVIew动画执行某些操作。我认为你可以完全摆脱这个功能。
当您添加CABasicAnimation
时,您告诉它更改图层&#34;不透明度&#34;的值。您可能想要的是&#34;不透明度&#34; (小写)。
您的动画正在应用于您已创建的新CALayer ......但您似乎无法将该图层放入视图中(因此从未绘制过)。更可能的是你应该做的是将动画附加到视图的图层,只允许该图层使其颜色变为动画。
要将一个图层添加到另一个图层,请使用addSublayer(https://developer.apple.com/reference/quartzcore/calayer/1410833-addsublayer)。您的代码中的视图图层应该以self.view.layer的形式提供,但您可能必须在viewWillAppear
而不是viewDidLoad
中使用它
答案 1 :(得分:0)
您需要在设置动画
之前将红色imageview的alpha设置为0.0 func pulseAnimation(pulseSpeed: Double) {
UIView.animate(withDuration: pulseSpeed, delay: 1.0,
options: [UIViewAnimationOptions.repeat, UIViewAnimationOptions.autoreverse],
animations: {
self.red.alpha = 0.5
self.red.alpha = 1.0
}
)
}
override func viewDidAppear(_ animated: Bool) {
self.red.alpha = 0.0
counter.center = CGPoint(x: 185, y: 118)
}