2016-01-13 53 views
0

當用戶在屏幕上按住('longPressGestureRecognizer')時,您在下面看到的代碼創建CALayer(矩形形狀)並將其從左到右進行動畫處理。當他們擡起手指時,CALayer停止動畫,將其推入數組中,當它們再次保持在屏幕上時,將創建另一個CALayer。您可以直接複製並在新項目粘貼代碼:Swift:在CABasicAnimation上設置定位點

//Global Variables 
var layer: CALayer? 
var holdGesture = UILongPressGestureRecognizer() 
let animation = CABasicAnimation(keyPath: "bounds.size.width") 
var layerHolder = [CALayer]() 
var widthIndex = CGPoint(x: 0, y: 0) 
var nextXOffset = CGFloat(0.0) 
var checkIfFull = CGFloat() 
var colorIndex : Int = 0 
let barColors = [ 
    //Red 
    UIColor(red: 0.969, green: 0.49, blue: 0.443, alpha: 1), 
    //Orange 
    UIColor(red: 0.984, green: 0.647, blue: 0.431, alpha: 1), 
    //Pink 
    UIColor(red: 0.894, green: 0.592, blue: 0.698, alpha: 1), 
    //Purple 
    UIColor(red: 0.851, green: 0.6, blue: 0.957, alpha: 1), 
    //Yellow 
    UIColor(red: 0.98, green: 0.875, blue: 0.455, alpha: 1), 
    //Green 
    UIColor(red: 0.49, green: 0.792, blue: 0.616, alpha: 1), 
    //Blue 
    UIColor(red: 0.553, green: 0.71, blue: 0.906, alpha: 1)] 



func setUpView(){ 

    self.view.addGestureRecognizer(holdGesture) 
    holdGesture.addTarget(self, action:"handleLongPress:") 

} 


func handleLongPress(sender : UILongPressGestureRecognizer){ 

    if(sender.state == .Began) { 

     let newLayer = CALayer() 
     newLayer.frame = CGRect(x: nextXOffset, y: 0, width: 0, height: 10) 
     newLayer.backgroundColor = barColors[colorIndex % 7].CGColor 

     print("before \(nextXOffset)") 
     newLayer.anchorPoint = widthIndex 
     animation.fromValue = 0 
     animation.toValue = self.view.bounds.width * 2 - nextXOffset 
     animation.duration = 5 
     self.view.layer.addSublayer(newLayer) 

     print("Long Press Began") 
     newLayer.addAnimation(animation, forKey: "bounds.size.width") 

     layer = newLayer 
    } 
    else { 
     print("Long press ended") 

     if let layer = layer { 
      print("after \(nextXOffset)") 

      pauseLayer(layer) 

      layer.frame = layer.presentationLayer()!.frame 
      nextXOffset = CGRectGetMaxX(layer.frame) 
      layerHolder.append(layer) 

      colorIndex++ 

     } 
    } 
} 

我的問題是創建和動畫新的CALayer時,從雙方不只是成長向右增長。我需要他們彼此並排,一個向右移動,另一個離開。直到我讓他們互換顏色,我才注意到它。經過一番研究,我相信從上一次CALayer離開的地方設置一個定位點是正確的方法。我一直在努力做到這一點,但一直未能做到這一點。幫我?請?

UPDATE:我相信如果我使用nextXOffset作爲定位點,我可能可以做到這一點,但它的類型是CGfloat而不是CGPoint。請幫助!

回答

0

這工作,我很愚蠢。將'widthIndex'保持在(0,0)允許它開始最後一個小節離開的位置。代碼起作用。