我想在另一个里面放一个圆形的盒子,像这样:
如您所见,右侧边缘被切除,但是我不明白为什么。
这是我正在使用的代码:
let underButton = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: 100.0, height: 100.0))
let gradient = CAGradientLayer()
gradient.frame = underButton.bounds
gradient.colors = [UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1).cgColor, UIColor(red: 200.0/255.0, green: 200.0/255.0, blue: 200.0/255.0, alpha: 1).cgColor]
let shapeMask = CAShapeLayer()
shapeMask.path = underButton.cgPath
gradient.mask = shapeMask
self.layer.insertSublayer(gradient, at:0)
let overRect = CGRect(x : rect.origin.x + 3, y : rect.origin.y, width : rect.size.width - 12.0, height: rect.size.height - 6.0)
let overButton = UIBezierPath(roundedRect: overRect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: 100.0, height: 100.0))
let gradient2 = CAGradientLayer()
gradient2.frame = overButton.bounds
gradient2.colors = [UIColor(red: 255.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1).cgColor, UIColor(red: 255.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1).cgColor]
let shapeMask2 = CAShapeLayer()
shapeMask2.path = overButton.cgPath
gradient2.mask = shapeMask2
self.layer.insertSublayer(gradient2, at:1)
有人可以帮助我了解我的错吗?先感谢您。
最佳答案
除了Superview / Superlayer之外,以某种形式设置某事物的frame
毫无意义,因此gradient.frame = underButton.bounds
行两次都是错误的。您希望两个渐变帧都为self.layer.bounds
,因为这将是它们的超层。
然后,只需将内部按钮移到中间,用x : rect.origin.x + 6
代替3,即可完成操作。
(我猜您也想在y原点加3,但这只是一个猜测。您没有显示所需输出的图像。)
关于ios - iOS两个圆形的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306048/