gpt4 book ai didi

iOS: "recognizer.view.center = CGPointMake(..."的错误效果

转载 作者:行者123 更新时间:2023-11-29 11:00:35 25 4
gpt4 key购买 nike

我正在使用 locationInView 来设置用户释放按钮时的位置。释放后,我给出了之前存储的位置,但实际上,我的按钮并没有回到正确的位置。

这是我的代码:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{

CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);

[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

static CGPoint startLocation;

if (recognizer.state == UIGestureRecognizerStateBegan) {
startLocation = [recognizer locationInView:self.view];
NSLog(@"Began: %d" @"-" @"%d", (int)startLocation.x , (int)startLocation.y);
}

if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"Ended Bef: %d" @"-" @"%d", (int)startLocation.x, (int)startLocation.y);
recognizer.view.center = CGPointMake(startLocation.x, startLocation.y);

startLocation = [recognizer locationInView:self.view];
NSLog(@"Ended Aft: %d" @"-" @"%d", (int)startLocation.x, (int)startLocation.y);

}

}

其实指令:

recognizer.view.center =  CGPointMake(startLocation.x, startLocation.y);

产生错误的效果。有人知道为什么吗?

最佳答案

几个想法:

  1. 我建议您在更改 center 之前确保捕获 startLocation

  2. 您正在使用用户触摸的位置作为 startLocation。您确实应该使用 recognizer.viewcenter 对其进行初始化。用户不太可能在按钮的中心准确地开始他们的手势。因此,您不太可能回到原来的位置。

有点不相关,但是:

  1. UIGestureRecognizerStateEnded<中重置recognizer.viewcenter时不需要使用CGMakePoint/ 子句。如果确实需要,可以使用 CGPointMake,但没有必要。如果需要,您可以只使用 startLocation

  2. 您可能想要动画化 View 返回到 startLocation。让它立即去那里是不和谐的。

  3. 顺便说一句,如果您保存了 startLocation,则不需要不断地重置 translation。只需使用 startLocation 加上 translation。对我来说似乎更清楚,但显然这是主观的。

  4. 我个人认为 NSStringFromCGPoint 在记录 CGPoint 结构时非常有用。

所以,我建议:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer
{
static CGPoint startLocation;

if (recognizer.state == UIGestureRecognizerStateBegan)
{
startLocation = recognizer.view.center;
NSLog(@"Began: %@", NSStringFromCGPoint(startLocation));
}

CGPoint translation = [recognizer translationInView:self.view];

recognizer.view.center = CGPointMake(startLocation.x + translation.x,
startLocation.y + translation.y);

if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"Ended Bef: %@", NSStringFromCGPoint(startLocation));

[UIView animateWithDuration:0.25
animations:^{
recognizer.view.center = startLocation;
}];

CGPoint finalLocation = [recognizer locationInView:self.view];
NSLog(@"Ended Aft: %@", NSStringFromCGPoint(finalLocation));
}
}

关于iOS: "recognizer.view.center = CGPointMake(..."的错误效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16060112/

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