【发布时间】:2019-03-22 00:54:45
【问题描述】:
我有一个如下的 XUIView 类。当我运行动画时,折叠没有效果。
谁能解释一下?
类视图控制器:UIViewController { // XUIView 实例的宽度约束 @IBOutlet 弱变量 vwWrapperWidth:NSLayoutConstraint! { 设置{ self.vwWrapperWidth.constant = UIScreen.main.bounds.width } } @IBAction func btnToggleTouchUp(_ sender: UIButton) { 如果(self.vwWrapperWidth.constant == 55){ // 展开时动画效果OK self.vwWrapperWidth.constant = UIScreen.main.bounds.width UIView.animate(withDuration:0.5,动画:{ self.view.layoutIfNeeded() }) } 别的 { // 折叠时动画效果不行 self.vwWrapperWidth.constant = 55 UIView.animate(withDuration:0.5,动画:{ self.view.layoutIfNeeded() }) } } //..... } @IBDesignable 类 XUIView: UIView { @IBInspectable var roundTopLeftCorner: 布尔 = 假 @IBInspectable var roundBottomLeftCorner: Bool = false @IBInspectable var roundTopRightCorner: 布尔 = 假 @IBInspectable var roundBottomRightCorner: Bool = false @IBInspectable 变角半径:CGFloat = 0.0 @IBInspectable var 边界宽度:CGFloat = 0.0 @IBInspectable var 边框颜色:UIColor? fileprivate varborderLayer:CAShapeLayer? { 设置{ self.layer.addSublayer(self.borderLayer!) } } func roundCorners(_角:UIRectCorner){ if(self.borderLayer == nil) { self.borderLayer = CAShapeLayer() } 让边界 = self.bounds 让 maskPath = UIBezierPath(roundedRect:边界,byRoundingCorners:角,cornerRadii:CGSize(宽度:self.cornerRadius,高度:self.cornerRadius)) 让 maskLayer = CAShapeLayer() maskLayer.frame = 边界 maskLayer.path = maskPath.cgPath self.layer.mask = maskLayer self.borderLayer?.frame = 边界 self.borderLayer?.path = maskPath.cgPath self.borderLayer?.strokeColor = self.borderColor?.cgColor self.borderLayer?.lineWidth = self.borderWidth self.borderLayer?.fillColor = nil } 覆盖 func layoutSubviews() { super.layoutSubviews() var roundedCorners: UIRectCorner = [] 如果(roundTopLeftCorner){roundedCorners.insert(.topLeft)} if(roundTopRightCorner) { roundedCorners.insert(.topRight) } 如果(roundBottomLeftCorner){roundedCorners.insert(.bottomLeft)} 如果(roundBottomRightCorner){roundedCorners.insert(.bottomRight)} 圆角(圆角) } }源代码:http://www.mediafire.com/file/n6svp1mk44fc0uf/TestXUIView.zip/file
【问题讨论】:
-
尝试删除 vwWrapperWidth 中的 didSet
-
@elbertrivas,didSet 在初始化时被调用一次,所以这不是原因。
标签: swift