gpt4 book ai didi

ios - 获取CALayer的贝塞尔路径

转载 作者:行者123 更新时间:2023-11-28 21:01:28 26 4
gpt4 key购买 nike

CALayer 对象有一个属性 accessibilityPath ,据称是

Returns the path of the element in screen coordinates.

当然,这不会返回层的路径。

有没有办法访问已创建的给定 CALayer 的物理路径?例如,当按钮初始化后,您将如何获取 UIButton 的图层属性的路径?

编辑

作为引用,我正在尝试检测旋转按钮是否包含一个点。这里困难的原因是按钮是在弯曲 View 中绘制的……

我最初的方法是创建贝塞尔曲线切片,然后将它们作为属性传递给按钮以检查路径是否包含该点。无论出于何种原因,路径和按钮似乎都有一个丑陋的偏移。

它们都被添加到同一个 View 并使用相同的坐标/值来确定它们的框架,但是注册的路径似乎从路径的实际绘制形状向左偏移。下面是我绘制的形状的图像。绿色轮廓是绘制(和显示......)路径的地方,其中红色大约是注册为内部路径的区域......

enter image description here

我很难理解注册区域有何不同。

如果有人对为什么会发生这种偏移有任何想法,我们将不胜感激。

更新

这是我添加形状的片段。 self 在这种情况下只是添加到 Controller 的 UIView。它的框架是 Controller 的完整尺寸,即 `{0, height_of_device - controllerHeight, width_of_device, controllerHeight}

UIBezierPath *slicePath = UIBezierPath.new;

[slicePath moveToPoint:self.archedCenterRef];
[slicePath addArcWithCenter:self.archedCenterRef radius:outerShapeDiameter/2 startAngle:shapeStartAngle endAngle:shapeEndAngle clockwise:clockwise];
[slicePath addArcWithCenter:self.archedCenterRef radius:(outerShapeDiameter/2 - self.rowHeight) startAngle:shapeEndAngle endAngle:shapeStartAngle clockwise:!clockwise];
[slicePath closePath];

CAShapeLayer *sliceShape = CAShapeLayer.new;
sliceShape.path = slicePath.CGPath;
sliceShape.fillColor = [UIColor colorWithWhite:0 alpha:.4].CGColor;
[self.layer addSublayer:sliceShape];

...
...

button.hitTestPath = slicePath;

在我的按钮子类中的一个单独方法中检测它是否包含点:(self 当然是按钮)

...
if ([self.hitTestPath containsPoint:touchPosition]) {
if (key.alpha > 0 && !key.isHidden) return YES;
else return NO;
}
else return NO;

最佳答案

您完全误解了该属性,这是用于辅助技术,来自文档:

摘录:

“该属性的默认值为nil。如果没有设置路径,无障碍框架矩形用于突出显示该元素。

当您为此属性指定一个值时,辅助技术使用您指定的路径对象(除了可访问性框架,而不是代替它)来突出显示该元素。"

你只能从一个CAShapeLayer中获取路径,所有其他的CALayer根本不需要绘制路径。

更新您的更新:

我认为偏移量是由于缺失

UIView convert(_ point: CGPoint, to view: UIView?)

需要将点转换为按钮坐标系。

关于ios - 获取CALayer的贝塞尔路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48549753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com