2015-10-08 136 views
0

PopUpMask是圓形UIView。我用它來掩蓋菜單。當用戶點擊一個按鈕時,菜單「pop」又成爲一個更大的圓圈。當用戶關閉它時,菜單縮小到一個更小的圓圈。當我縮放它時,動畫會起作用,但是當我想縮小它時,它會在動畫過程中轉換爲正方形。它如何能夠縮小爲一個圓圈?CGAffineTransformMakeScale圓形UIView動畫爲正方形

這裏的UIView縮放:

class PopUpMask: UIView { 

    override init(frame: CGRect) { 
     super.init(frame: CGRectMake(0, 0, 40, 40)) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override func drawRect(rect: CGRect) { 
     self.layer.cornerRadius = 20 
    } 
} 

這些都是調用的方法:

func unmaskToolbarBackground() { 
    UIView.animateWithDuration(0.3, delay: 0.3, options: .CurveEaseOut, animations: { 
     self.popUpMask.transform = CGAffineTransformMakeScale(12, 12) 
     self.toolbarView.maskView? = self.popUpMask 
     }, completion: nil) 
    } 

func maskToolbarBackground() { 
    UIView.animateWithDuration(0.4, delay: 0, options: .CurveEaseOut, animations: { 
     self.popUpMask.transform = CGAffineTransformMakeScale(0.02, 0.02) 
     self.toolbarView.maskView? = self.popUpMask 
     }, completion: nil) 
} 

回答

2

如果我這樣做是正確,你應該修改這個:

override func drawRect(rect: CGRect) { 
     self.layer.cornerRadius = 20 
    } 

要像這個:

override func drawRect(rect: CGRect) { 
     self.layer.cornerRadius = 20 
     self.layer.masksToBounds = true 
    } 

P.S.有點不合時宜:除非遇到名稱衝突,否則您不再需要使用self以Obj-C方式訪問 「自己」的方法。