需要有关多层动画位置的帮助

时间:2014-05-03 06:17:03

标签: ios iphone objective-c ipad

我正在尝试动画实际上是图像的气球。为此,我创建了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轴上的距离,它将在一个时间间隔内由图层传播。

2 个答案:

答案 0 :(得分:0)

答案 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)