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 和一些基础数学的主要内容,如果未能解决你的问题,请参考以下文章

[转]机器学习和计算机视觉----数学基础

数学基础课--《看数学之美后的随想》什么是数学?

数学基础系列:极限与连续

从勾股定理到余弦相似度-程序员的数学基础

数学建模基础

一些数学基础(辗转相除法筛法快速幂)