我尝试翻转具有圆角(边框)的视图。带圆角的翻转UIView
视图的圆角与实施:
private extension UIView {
func round(corners: UIRectCorner, radius: CGFloat, borderColor: UIColor, borderWidth: CGFloat) {
let mask = _round(corners: corners, radius: radius)
addBorder(mask: mask, borderColor: borderColor, borderWidth: borderWidth)
}
@discardableResult func _round(corners: UIRectCorner, radius: CGFloat) -> CAShapeLayer {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
return mask
}
func addBorder(mask: CAShapeLayer, borderColor: UIColor, borderWidth: CGFloat) {
let borderLayer = CAShapeLayer()
borderLayer.path = mask.path
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = borderColor.cgColor
borderLayer.lineWidth = borderWidth
borderLayer.frame = bounds
layer.addSublayer(borderLayer)
}
}
当翻盖上运行的翻盖与
UIView.transition(with: self, duration: 0.5, options: [.transitionFlipFromRight], animations: {}, completion: {_ in })
实施,寄宿生都不会再四舍五入而过渡正在运行。
任何人有一个想法如何做翻盖,没有松动的圆角?
更新
如果我去this的做法,我有几个问题。
翻盖现在已经实现这样的:
let flipAnimation = CABasicAnimation(keyPath: "transform")
flipAnimation.fromValue = NSValue(caTransform3D: CATransform3DIdentity)
flipAnimation.toValue = NSValue(caTransform3D: CATransform3DMakeRotation(.pi, 0,1,0))
flipAnimation.fillMode = kCAFillModeBoth
self.layer.add(flipAnimation, forKey: "flip")
self.layer.zPosition = -1000
CATransaction.commit()
问题
- 动画不说,光滑如UIView.transition
- 的影响反映在视图上的内容 - - >我不需要(下图)
- 旋转不完全结束,所以视图在某个时候放错了位置S(下图)
更新:溶液 我加入一个容器视图与周围的圆角着色视图和翻转所述容器代替的着色图。然后一切正常!
可能的重复[你如何翻转非圆全角UIView的超视图?](https://stackoverflow.com/questions/10727356/how-do-you-flip-non-fullscreen-uiviews- in-a-superview-rounded-corners) – agibson007
我更新了问题,thx为你的提示。 – sialcasa
你想如何看待它被旋转后的视图? – agibson007