圆形UIView上的CGAffineTransformMakeScale动画为正方形

时间:2015-10-08 19:55:44

标签: ios swift uiviewanimation

PopUpMask是一个循环UIView。我用它来掩盖菜单。当用户点击按钮时,菜单“pop”也变成了一个更大的圆圈。当用户关闭它时,菜单缩小到较小的圆圈。当我缩放它时动画可以工作,但是当我想缩小它时它会在动画期间变换为方形。它如何缩小为一个圆圈?

以下是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)
}

1 个答案:

答案 0 :(得分: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方式的方法除非你有名字冲突。