这对我来说是一个奇怪的问题,在花了两天时间试图修复它并阅读了我在苹果网站上可以找到的内容和堆栈溢出之后,我仍然没有解决方案。希望有人可以帮助我。
所以我正在旋转视图坐标系中的 CAShapeLayer。旋转后,帧坐标会更新,但路径的坐标不会。
在屏幕上,路径和框架都显示为旋转!因此,如果我使用 path.contains 来查看旋转后某个点是否属于 CAShapeLayer,则会得到错误的答案。使用旋转框架不起作用,因为相邻路径的框架可能重叠并给出错误答案。
这是旋转相关 CAShapeLayer 的代码:
let shapeCopy = CAShapeLayer()
let inputShape = tempShapeList[index]
shapeCopy.backgroundColor =UIColor.red.withAlphaComponent(0.75).cgColor
shapeCopy.frame = inputShape.frame
shapeCopy.bounds = inputShape.bounds
shapeCopy.path = inputShape.path
shapeCopy.position = inputShape.position
shapeCopy.anchorPoint = inputShape.anchorPoint
print("bounding rect pre rotation: \(shapeCopy.frame)")
print("path pre rotation: \((shapeCopy.path)!)")
let transform = CATransform3DMakeRotation(CGFloat(75*Double.pi/180.0), 0, 0, 1)
shapeCopy.transform = transform
print("bounding rect post rotation:\(shapeCopy.frame)")
print("path post rotation: \((shapeCopy.path)!)")
if ((shapeCopy.path)!.contains(newPoint)) {
containingView.layer.addSublayer(shapeCopy)
answer = index
print("Prize is:\(String(describing: textLabelList[index].text))")
break
}
Run Code Online (Sandbox Code Playgroud)
调试器中的消息:
包围矩形预旋转:(139.075809065823,236.846930318145,174.164592138914,163.153069681855)
路径预旋转:路径0x600000236a60:
通过MoveTo(207,400)
了lineTo(138.901,266.349)
curveto(196.803,236.847)(267.115,247.983)(313.066,293.934) …