gpt4 book ai didi

iphone - 为 UIView 层设置 anchor

转载 作者:太空狗 更新时间:2023-10-30 03:40:55 28 4
gpt4 key购买 nike

我有一个 UIView 子类,我希望它能够在它的 super View 中移动。当用户在 self.center 之外但在 self.bounds 内的某处触摸 UIView 时,它会“跳跃”,因为我将新位置添加到 self.center 实现实际移动。为了避免这种行为,我试图设置一个 anchor ,让用户可以在其边界内的任何地方抓取和拖动 View 。

我的问题是当我计算新的 anchor 时(如下面的代码所示)没有任何反应, View 根本没有改变位置。另一方面,如果我将 anchor 设置为预先计算的点,我可以移动 View (但当然它会“跳”到预先计算的点)。为什么这不能按预期工作?

谢谢。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
// Only support single touches, anyObject retrieves only one touch
UITouch *touch = [touches anyObject];
CGPoint locationInView = [touch locationInView:self];

// New location is somewhere within the superview
CGPoint locationInSuperview = [touch locationInView:self.superview];

// Set an anchorpoint that acts as starting point for the move
// Doesn't work!
self.layer.anchorPoint = CGPointMake(locationInView.x / self.bounds.size.width, locationInView.y / self.bounds.size.height);
// Does work!
self.layer.anchorPoint = CGPointMake(0.01, 0.0181818);

// Move to new location
self.center = locationInSuperview;
}

最佳答案

正如 Kris Van Bael 指出的那样,您需要在 touchsBegan:withEvent: 方法中进行 anchor 计算,以免否定移动。此外,由于更改图层的 anchorPoint 会移动 View 的初始位置,因此您必须向 View 的 center 点添加一个偏移量,以避免在第一次触摸后出现“跳跃”。

您可以通过计算(并添加到 View 的 center 点)基于初始和最终 anchorPoints 之间的差异(乘以 View 的宽度/高度)的偏移量来执行此操作,或者您可以设置 View 的 center 到初始触摸点。

也许是这样的:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint locationInView = [touch locationInView:self];
CGPoint locationInSuperview = [touch locationInView:self.superview];

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

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint locationInSuperview = [touch locationInView:self.superview];

self.center = locationInSuperview;
}

关于 anchorPoint 的更多信息来自 apple 的文档 here和我引用的类似 SO 问题 here .

关于iphone - 为 UIView 层设置 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822457/

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