我正在尝试重新实现与Apple Watch Friend Picker类似的功能。我有两个UIViews,它们的角半径都是它们高度的一半,因此它们显示为圆圈。如何计算它们重叠的位置并仅显示该部分。我的UI位于第一张图片中,第二张图片包含所需的行为。在此先感谢您的帮助吗?
答案 0 :(得分: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
}
为避免过度命中检测,您应该跟踪当前所选视图,并仅检查与所选视图之前的视图,所选视图以及所选视图后面的视图的交点。如果你感兴趣,我已经创建了一个基本的example掩蔽。