PanGesture 和一些基础数学
Posted
技术标签:
【中文标题】PanGesture 和一些基础数学【英文标题】:PanGesture and some basic math 【发布时间】:2017-12-07 17:47:36 【问题描述】:我想根据用户“平移”屏幕的位置计算 0-100 的百分比。如果它在最底部,0%。如果它是最高的,100%。我需要这个来实现不透明滑动功能。用户可以通过滑动来更改屏幕的不透明度,其中最底部将屏幕设置为不可见,而最顶部将其设置为最亮,100%。
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer
CGPoint translation = [recognizer translationInView:self.view];
NSLog(@"Translation: %f", translation.x);
我很确定我正在考虑将translation.x
转换为百分号,但这很令人困惑。
【问题讨论】:
垂直使用y
,而不是x
。
【参考方案1】:
假设您的视图覆盖整个屏幕,我相信您正在寻找的百分比是
CGPoint location = [recognizer locationInView:self.view];
CGFloat percentage = 1.0 - (location.y / self.view.bounds.size.height);
locationInView
为您提供视图坐标系中的一个点,该点由其bounds
定义,左上角为 (0,0)。您希望顶部为 100%,因此从 1 中减去以翻转它(否则您将在底部得到 100%)。
【讨论】:
不确定这是否正确,我在屏幕顶部和底部都得到了 1.0 的值。translation.y
在每种情况下的值是多少? self.view.bounds.size.height
的值是多少?我还注意到我在代码中使用了“y”,因为您谈到了“底部”和“顶部”。如果您实际上是在左右平移(因此在代码中引用了“x”),那么您应该改用translation.x / self.view.bounds.size.width
。
屏幕中间:翻译:-100.666656 --- 屏幕底部:翻译:-2.333344 --- 屏幕顶部 翻译:2.333344 .. id 喜欢中间为 0.5(或50%) 顶部为 100% 或 (1),底部为 0% 或 (0)
对不起...刚刚弄清楚我错过了什么。 translationInView
为您提供您从开始位置平移的相对距离。无论您从哪里开始,都称为 (0,0),之后的所有 translationInView
点都相对于该位置。我相信您想要的是locationInView
,它为您提供视图坐标系中点的坐标,无论您从哪里开始。假设self.view
中的视图覆盖了整个屏幕,我的原始代码可以工作。我要去编辑我的答案。【参考方案2】:
translation:in: 为您提供自触摸开始位置以来的累积运动。听起来您所追求的是相对于视图边界的触摸位置,因此您应该改用location:in:。此值 .y 除以 view.bounds.size.height 将为您提供屏幕下方的相对距离,顶部为 0,底部为 1,
【讨论】:
以上是关于PanGesture 和一些基础数学的主要内容,如果未能解决你的问题,请参考以下文章