gpt4 book ai didi

iphone - 限制 UIPanGestureRecognizer 的平移范围

转载 作者:行者123 更新时间:2023-11-29 04:14:03 26 4
gpt4 key购买 nike

我当前隐藏在屏幕底部的 View 。现在我希望能够通过 y 轴垂直滚动来移动 View 。但我不希望它上升到超过 View 的完整高度(即:我不想在底部看到空白)。我写了这段代码:

- (IBAction)panHighlightReadingVC:(UIPanGestureRecognizer *)recognizer
{
CGPoint translation = [recognizer translationInView:self.view];

CGPoint newCenter = CGPointMake(self.view.bounds.size.width / 2,
roundf(recognizer.view.center.y + translation.y));

CGFloat velocityY = [recognizer velocityInView:self.view].y;
if ((recognizer.view.frameY > self.view.frameHeight - recognizer.view.frameHeight || velocityY > 0)) {
recognizer.view.center = newCenter;
[recognizer setTranslation:CGPointZero inView:self.view];
}
}

这种工作,如果我慢慢滚动的话。如果我滚动得非常快,那么 View 的frameY有可能小于`superView.frameHeight - recognizer.view.frameHeight。我该如何解决这个问题?

最佳答案

当您计算 newCenter 时,请将其限制在您实际希望它适合的范围内。如果您将 newCenter 限制在范围内,则可能不需要最后一个 if 语句你的极限。

此外,请帮自己一个忙,仅在中心确实使事情变得更简单时才使用中心。对于你的情况,我认为你应该使用框架。那么你就不必担心除以 2。

尝试这样的事情:

- (IBAction)panHighlightReadingVC:(UIPanGestureRecognizer *)recognizer
{
CGPoint translation = [recognizer translationInView:self.view];

CGFloat newY = MAX(recognizer.view.frame.origin.y + translation.y, self.view.frameHeight - recognizer.view.frameHeight);

CGRect newFrame = CGRectMake(recognizer.view.frame.origin.x, newY, recognizer.view.frame.size.width, recognizer.view.frame.size.height);

recognizer.view.frame = newFrame;
[recognizer setTranslation:CGPointZero inView:self.view];
}

此外,速度似乎不适用于您的情况,它只会使事情变得复杂。

关于iphone - 限制 UIPanGestureRecognizer 的平移范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958516/

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