我正在尝试重新实现类似于 Apple Watch Friend Picker 的东西。我有两个 UIView,它们的角半径都是它们高度的一半,所以它们显示为圆形。我如何计算它们重叠的位置并仅显示该部分。我的 UI 在第一张图片中,第二张包含所需的行为。提前感谢您的帮助?
问问题
184 次
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 回答