2015-09-26 81 views
0

我有一個UIView,它覆蓋了另一個UIView。當點擊覆蓋視圖時,我希望它「下降」,這是我們圍繞其底部中心點圍繞其x軸製作動畫的地方。UIView圖層在圍繞非中心定位點旋轉時移動

我實現了這個像這樣:

private func showCategories(animated: Bool) 
{ 
    UIView.animateWithDuration(2, 
     delay: 0, 
     options: [.CurveEaseIn], 
     animations: { 

      self.setAnchorPoint(CGPoint(x: 0.5, y: 1), forView: self.titleView) 

      var rotationAndPerspectiveTransform = CATransform3DIdentity 
      rotationAndPerspectiveTransform.m34 = 1/-500 
      rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, CGFloat(-179 * M_PI/180), 1, 0, 0); 

      self.titleView.layer.transform = rotationAndPerspectiveTransform; 
     }) { (success) -> Void in 

      // 
    } 
} 

我發現了一個解決方案,它說,改變錨點移動視圖,所以要解決它,你需要移動它採取在考慮錨點並轉型。它提供了此代碼:

private func setAnchorPoint(anchorPoint: CGPoint, forView view: UIView) 
{ 
    var newPoint = CGPoint(x: view.bounds.width * anchorPoint.x, y: view.bounds.height * anchorPoint.y) 
    var oldPoint = CGPoint(x: view.bounds.width * view.layer.anchorPoint.x, y: view.bounds.height * view.layer.anchorPoint.y) 

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform); 
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform); 

    var position = view.layer.position; 

    position.x -= oldPoint.x; 
    position.x += newPoint.x; 

    position.y -= oldPoint.y; 
    position.y += newPoint.y; 

    view.layer.position = position; 
    view.layer.anchorPoint = anchorPoint; 
} 

但是,這仍然不適用於我。我用錯了嗎?

P.s,我意識到animated參數尚未被記錄下來......這是爲了調試目的。

回答

0

好的,將setAnchor:forView:方法移動到動畫塊之前。

我的不好。