ios - iOS两个圆形的矩形

标签 ios swift xcode

我想在另一个里面放一个圆形的盒子,像这样:
enter image description here
如您所见,右侧边缘被切除,但是我不明白为什么。
这是我正在使用的代码:

    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/

相关文章:

ios - NSMutableArray 集合和@Synchronized block

c++ - Xcode 10.3 构建失败 “Undefined symbols for architecture x86_64”

ios - UIImageView 来回弹跳

ios - 滚动 UITableView 时单元格消失并重新出现

iOS 滑动检测仅适用于 1 个 UITableViewCell?

ios - 如何将 SKScene 添加到 SCNNode 平面?

ios - 带有嵌套解析查询的 GCD

ios - 快速 iOS 本地通知

ios - 如何在一个 View Controller 中快速将占位符设置为多个 TextView

objective-c - 在没有 Storyboard或 XIB 的 UIViewController 之间进行 Segue