2016-07-17 64 views
0

我用Autolay在屏幕中央放置了一個UIView。這個UIView是一個正方形,大小爲屏幕寬度的15%。然後我控制器上我添加cornerRadius:圓形UIView比例尺動畫有時會回到正方形

override func viewDidLayoutSubviews() { 
    circle.layer.cornerRadius = circle.frame.size.width/2.0 
} 

然後當上的按鈕用戶點擊,圓形的觀點是縮小與第一動畫。

UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: {() -> Void in 
    self.circle.alpha = 0.0 
    self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01) 
}) { (finished) -> Void in 
    scaleUp() 
} 

private func scaleUp() { 
    UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: {() -> Void in 
     self.circle.alpha = 1.0 
     self.circle.transform = CGAffineTransformIdentity 
    }) { (finished) -> Void in 

    } 
} 

有時縮小比例動畫不能正常工作。在開始cornerRadius之前,我的UIView變成了一個正方形。但是有時候我的動畫效果不錯,圓形縮小動畫可以。

此外,放大動畫似乎一直運作良好。

我不明白爲什麼縮小比例動畫不能始終工作。

有什麼想法?

感謝

回答

0

自動佈局啓用動畫,它通常是一個好主意,請您查看layoutIfNeeded在循環開始動畫,再次之前。

override func viewDidLayoutSubviews() { 
    circle.layer.cornerRadius = circle.frame.size.width/2.0 
} 

@IBAction func scaleDownUp(sender: AnyObject) { 
    self.circle.layoutIfNeeded() 
    UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: {() -> Void in 
     self.circle.alpha = 0.0 
     self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01) 
     self.circle.layoutIfNeeded() 
    }) { (finished) -> Void in 
     self.scaleUp() 
    } 
} 

private func scaleUp() { 
    self.circle.layoutIfNeeded() 
    UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { 
     self.circle.alpha = 1.0 
     self.circle.transform = CGAffineTransformIdentity 
     self.circle.layoutIfNeeded() 
    }) { (finished) -> Void in 

    } 
} 
+0

我仍然有與調用layoutIfNeeded() – guillaume

+0

相同的行爲嗯。如果你調用'self.view.layoutIfNeeded()'而不是?我無法重現您的問題。我有一個居中視圖,即屏幕寬度的15%。高度等於寬度。還有什麼我可以做到這一點? – vacawama

+0

它似乎解決了問題的一部分,因爲現在我有時在scaleUp動畫中有一個方形視圖。我會嘗試一個新項目,看看我是否可以重現該錯誤。 – guillaume