I have a XUIView class as below. When I run animation, it's no effect for folding.
Who can explain me ?
class ViewController: UIViewController { // Width constraint of XUIView instance @IBOutlet weak var vwWrapperWidth: NSLayoutConstraint! { didSet{ self.vwWrapperWidth.constant = UIScreen.main.bounds.width } } @IBAction func btnToggleTouchUp(_ sender: UIButton) { if(self.vwWrapperWidth.constant == 55) { // animation effect is OK when expanding self.vwWrapperWidth.constant = UIScreen.main.bounds.width UIView.animate(withDuration: 0.5, animations: { self.view.layoutIfNeeded() }) } else { // animation effect is not OK when folding self.vwWrapperWidth.constant = 55 UIView.animate(withDuration: 0.5, animations: { self.view.layoutIfNeeded() }) } } //..... } @IBDesignable class XUIView: UIView { @IBInspectable var roundTopLeftCorner: Bool = false @IBInspectable var roundBottomLeftCorner: Bool = false @IBInspectable var roundTopRightCorner: Bool = false @IBInspectable var roundBottomRightCorner: Bool = false @IBInspectable var cornerRadius: CGFloat = 0.0 @IBInspectable var borderWidth: CGFloat = 0.0 @IBInspectable var borderColor: UIColor? fileprivate var borderLayer: CAShapeLayer? { didSet{ self.layer.addSublayer(self.borderLayer!) } } func roundCorners(_ corners: UIRectCorner) { if(self.borderLayer == nil) { self.borderLayer = CAShapeLayer() } let bounds = self.bounds let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: self.cornerRadius, height: self.cornerRadius)) let maskLayer = CAShapeLayer() maskLayer.frame = bounds maskLayer.path = maskPath.cgPath self.layer.mask = maskLayer self.borderLayer?.frame = bounds self.borderLayer?.path = maskPath.cgPath self.borderLayer?.strokeColor = self.borderColor?.cgColor self.borderLayer?.lineWidth = self.borderWidth self.borderLayer?.fillColor = nil } override func layoutSubviews() { super.layoutSubviews() var roundedCorners: UIRectCorner = [] if(roundTopLeftCorner) { roundedCorners.insert(.topLeft) } if(roundTopRightCorner) { roundedCorners.insert(.topRight) } if(roundBottomLeftCorner) { roundedCorners.insert(.bottomLeft) } if(roundBottomRightCorner) { roundedCorners.insert(.bottomRight) } roundCorners(roundedCorners) } }
source code : http://www.mediafire.com/file/n6svp1mk44fc0uf/TestXUIView.zip/file