我正在尝试动画实际上是图像的气球。为此,我创建了CALayer的子类,它在其内容中显示了一个图像,最后这个子类的多个对象将被添加到viewcontroller的视图中。
一旦我打电话给一个功能"弹跳"在这个子类的每个对象上。所有这些图层(气球)的位置开始动画,以便在视图边界周围创建反弹效果。它不断改变图层的位置,直到它通过调用方法" stopBouncing"来停止它。
现在的问题是,如果气球的数量很高,那么层中会有一些闪烁,性能也不好。
如果有人可以帮助我有效实施此类要求,我将非常感激。
注意:这适用于iPhone。
一段完整的代码:
-(void)bounce
{
self.position=CGPointMake(self.position.x+self.moveOffset.x,self.position.y+self.moveOffset.y);
if(self.position.x>self.maxBoundary.x || self.position.x<self.minBoundary.x)
{
self.moveOffset.x=-self.moveOffset.x;
}
if(self.position.y>self.maxBoundary.y || self.position.y<self.minBoundary.y)
{
self.moveOffset.y=-self.moveOffset.y;
}
}
此处,moveOffset是x轴和y轴上的距离,它将在一个时间间隔内由图层传播。
答案 0 :(得分:0)
不要使用图层。
改用Sprite Kit。
答案 1 :(得分:0)
在这里,您希望将气球指定为图层,而不是实际为UIImage设置动画。这段代码有点陈旧,但在 Swift 3 中,您需要确保编写这样的代码:
let balloonImage = CALayer()
balloonImage.contents = UIImage(named: "balloon")!.cgImage
balloonImage.frame = CGRect(x: -50.0, y: 0.0, width: 50.0, height: 65.0)
view.layer.insertSublayer(balloonImage, below: username.layer)
UIImage(名称:“”)应该是你的图像被调用的任何东西,框架是你想要你的图层的大小,它是UIImage的复制品。然后将视图插入主视图中。 let flight允许您对您创建的图层执行动画。您可以使用不同的设置动画,例如CABasicAnimation,CASpringAnimation等,但请注意,因为不同的动画具有不同的默认设置,因为您无法在CABasicAnimation中使用提供值/时间。 keyframeAnimation只是使用动画的值。您还可以使用不同的键路径,如“position.x”或“postion.y”。其他关键路径包括:transform.rotation,position.x,position.y。
let flight = CAKeyframeAnimation(keyPath: "position")
flight.duration = 30.0
flight.values = [
CGPoint(x: -50.0, y: 0.0),
CGPoint(x: view.frame.width + 50, y: 160.0),
CGPoint(x: -50.0, y: loginButton.center.y)
].map({
NSValue(cgPoint: $0)
})
flight.keyTimes = [0.0, 0.5, 1.0]
balloonImage.add(flight, forKey: nil)
balloonImage.position = CGPoint(x: -50.0, y: loginButton.center.y)