2016-04-21 43 views
-1

我正在尝试重新实施类似Apple Watch朋友选取器的操作。我有两个UIViews,都是半角高度的圆角半径,因此它们显示为圆形。我如何计算它们重叠的位置并仅显示该部分。我的用户界面在第一张图片中,第二张包含所需的行为。预先感谢您的帮助? Current UIApple Watch UI如何在与其他iOS重叠时显示UIView?

回答

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