gpt4 book ai didi

iphone - CALayer 中的 anchor

转载 作者:行者123 更新时间:2023-12-03 20:22:15 24 4
gpt4 key购买 nike

查看Apple文档中的Touches示例,有这样的方法:

// scale and rotation transforms are applied relative to the layer's anchor point
// this method moves a gesture recognizer's view's anchor point between the user's fingers
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
UIView *piece = gestureRecognizer.view;
CGPoint locationInView = [gestureRecognizer locationInView:piece];
CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];

piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
piece.center = locationInSuperview;
}
}

第一个问题,有人可以解释一下在 subview 中设置 anchor 并更改 super View 中心的逻辑(比如为什么要这样做)吗?

最后,anchorPoint 语句的数学运算是如何进行的?如果您有一个边界为 500、500 的 View ,并说您用一根手指触摸 100、100,用另一根手指触摸 500、500。在此框中,您的正常 anchor 是 (250, 250)。现在是??? (不知道)

谢谢!

最佳答案

View 的 center 属性仅反射(reflect)其支持层的 position 属性。令人惊讶的是,这意味着 center 不必位于 view 的中心。 position 位于其边界内的位置基于 anchorPoint,它接受 (0,0) 和 (1,1) 之间的任何值。将其视为位置是否位于其边界内的标准化指标。如果您要更改anchorPointposition,边界将自行调整,而不是位置移动到其superlayer/ super View 。因此,要重新调整位置以使 View 框架不会移动,可以操纵中心

piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);

想象一下原来的东西是 O 是触摸点,

+++++++++++  
+ O + +++++++++++
+ X + --> + X +
+ + + +
+++++++++++ + +
+++++++++++

现在我们希望这个X位于用户触摸的位置。我们这样做是因为所有缩放和旋转都是基于位置/anchorPoint完成的。要将框架调整回其原始位置,我们将 View 的“center”设置为触摸位置。

piece.center = locationInSuperview;

所以这反射(reflect)在 View 重新调整其框架后,

                    +++++++++++  
+++++++++++ + X +
+ X + --> + +
+ + + +
+ + +++++++++++
+++++++++++

现在,当用户旋转或缩放时,就像轴位于触摸点而不是 View 的真正中心一样。

在您的示例中, View 的位置最终可能是平均值,即 (300, 300),这意味着 anchorPoint 将为 (0.6, 0.6),并且作为响应 frame 将向上移动。要重新调整,我们将中心移动到触摸位置,框架将向下移动。

关于iphone - CALayer 中的 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379648/

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