-1

我正在尝试重新实现类似于 Apple Watch Friend Picker 的东西。我有两个 UIView,它们的角半径都是它们高度的一半,所以它们显示为圆形。我如何计算它们重叠的位置并仅显示该部分。我的 UI 在第一张图片中,第二张包含所需的行为。提前感谢您的帮助?当前用户界面苹果手表用户界面

4

1 回答 1

1

对于每个带有首字母的圆圈,您可以有一个顶视图 - 未选中状态 - 和一个底视图 - 选中状态。然后,您将拥有一个圆形的可移动视图,该视图跟踪到该点的尖端。当该视图与任何外圆相交时,您将创建一个遮罩,该遮罩等于该不可见视图的圆形边界。

例如:

if CGRectIntersectsRect(self.movableView.frame, self.topView.frame)
        {
            self.topView.layer.mask = nil
            let shapeLayer = CAShapeLayer()
            let rect = self.topView.convertRect(self.movableView.bounds, fromView: self.movableView)
            let path = UIBezierPath(ovalInRect: rect)
            let maskPath = CGPathCreateMutable()
            CGPathAddRect(maskPath, nil, self.view.frame)
            CGPathAddPath(maskPath, nil, path.CGPath)
            shapeLayer.path = maskPath
            shapeLayer.fillRule = kCAFillRuleEvenOdd
            self.topView.layer.mask = shapeLayer
        }

为了避免过多的命中检测,您应该跟踪当前选定的视图,并且只检查与紧接在选定视图之前的视图、选定视图和选定视图之后的视图的交叉点。如果您有兴趣,我已经创建了一个基本的掩蔽示例。

于 2016-04-22T01:32:59.623 回答