- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序中有一个 UIPanGesture View 。我的应用程序最底部有一个按钮,当用户向上滑动它时,它会转到屏幕的最顶部。问题是当用户向上滑动它时,它停在中间,然后用户必须再次向上滑动它才能到达屏幕的最顶部。我如何使它向上滑动并位于最顶部?此外,向下轻弹它也会停在中心,但一旦向上轻弹它就不会到达屏幕最底部的起点。它的最低点是屏幕的中间。这是我的代码。
-(IBAction) dragMe: (UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:recognizer.view.superview];
recognizer.view.center = CGPointMake(recognizer.view.center.x, + recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:recognizer.view.superview];
if (recognizer.state == UIGestureRecognizerStateEnded) {
CGPoint velocity = [recognizer velocityInView:recognizer.view.superview];
CGFloat magnitude = sqrtf((velocity.y * velocity.y));
CGFloat slideMult = magnitude / 50
;
NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);
float slideFactor = 0.1 * slideMult; // Increase for more of a slide
CGPoint finalPoint = CGPointMake(recognizer.view.center.x,
recognizer.view.center.y + (velocity.y * slideFactor));
finalPoint.x = MIN(MAX(finalPoint.x, 160), recognizer.view.superview.bounds.size.width);
finalPoint.y = MIN(MAX(finalPoint.y, 284), recognizer.view.superview.bounds.size.height);
[UIView animateWithDuration:slideFactor*.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
recognizer.view.center = finalPoint;
} completion:nil];
}
提前致谢!
最佳答案
您必须了解函数中的代码真正做了什么,以便能够找出问题所在。
if (recognizer.state == UIGestureRecognizerStateEnded)
中的这段代码根据手势的速度计算可拖动 View 的最终点,并将其动画化到该点。
这段代码在这里
finalPoint.x = MIN(MAX(finalPoint.x, 160), recognizer.view.superview.bounds.size.width);
finalPoint.y = MIN(MAX(finalPoint.y, 284), recognizer.view.superview.bounds.size.height);
它正在处理您的 super View 的边界,以防止您的可拖动 View 超过其父 View 的边界。
出于某种原因,代码中最后一点的 x 和 y 值的最小值为 160 和 284,这几乎就像在 super View 的中心。
要更正此问题,请将此代码更改为:
finalPoint.x = MIN(MAX(finalPoint.x, recognizer.view.bounds.size.width/2.0), recognizer.view.superview.bounds.size.width);
finalPoint.y = MIN(MAX(finalPoint.y, recognizer.view.bounds.size.height/2.0), recognizer.view.superview.bounds.size.height);
现在,您的可拖动 View 的原点将不会通过其父边界的 0 值。
重要的是你要明白那是你的代码,它不是将你的按钮(可拖动 View )动画化到你的 View 顶部,而是,就像我之前说的,根据速度计算它的最终位置。
如果您真正想要的是在 View 的顶部和底部之间切换的按钮,请尝试如下操作:
//in .h file
@interface yourClass : yourFatherClass
{
BOOL _isInTop;
}
//in the gesture method
if (_isInTop){
_isInTop = NO;
finalPoint.y = recognizer.view.superview.bounds.size.height - recognizer.view.bounds.size.height/2.0
}
else
{
_isInTop = YES;
finalpoint.y = recognizer.view.bounds.size.height/2.0
}
如果这真的是你想要的,请提供一些反馈
关于ios - Pan Gesture View 在中间停止 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935426/
我正在开发一个应用程序,我在其中使用了平移手势和滑动手势。因此,每次我执行滑动手势时,总是会调用平移手势中的方法,而不会调用滑动手势方法。 所有手势方法之间是否有优先级? 最佳答案 您可以通过实现UI
默认情况下,当您在 D3 中创建新的缩放行为时,它会映射鼠标滚轮来控制缩放级别。如果图表大于图表区域,您还可以单击并拖动来平移图表。我想重新映射鼠标滚轮手势以在垂直轴上平移(鼠标滚轮向上平移,鼠标滚轮
我认为有一些算法可以评估绘制符号和预期符号之间的差异,或者类似的东西。任何帮助将不胜感激 :)) 最佳答案 您可以实现一个简单的神经网络来识别手写数字。最简单的实现类型是通过反向传播训练的前馈网络(它
在iPhone App中如何实现摇动手势? 请帮忙并提出建议。 谢谢 最佳答案 如果您的 ViewController 启用第一响应者 [self becomeFirstResponder] 并实现m
在多点触控环境中,手势识别是如何工作的?使用哪些数学方法或算法来识别或拒绝可能手势的数据? 我制作了一些反光手套和一个红外 LED 阵列,以及一个 Wii Remote 。 Wii Remote 进行
我正在尝试使用以下库通过我的 lit-element 实现手势:https://github.com/composi/gestures 在我的文件顶部,我有以下内容: import { gesture
我在 flutter 打中使用“矩阵手势检测器”小部件。我设法重置了缩放比例,但是下次放大时,它从上一个缩放位置开始。我找不到解决此问题的解决方案。 有人可以告诉我从原始位置开始的方法吗 这是我的代码
我们目前正在检查我们的应用程序是否与即将推出的 iPhone X 及其新外形和手势兼容。我们注意到有关切换到主屏幕手势的问题,向上滑动实际上会触发位于屏幕底部的按钮上的 Action 。 在我们的例子
我使用UICollectionViewCell设计了一个XIB,在该自定义单元中,我有一个UILabel已启用其用户交互功能。 当我设计viewcontroller时,在我的cell中,这是我的代码。
我尝试检测 android 中的手势,但它一直崩溃,我在创建构造函数时遇到问题,我在使用类方面不是那么先进 这是 GestureDetector 类,包括 OnGestureListener 的所有必
我是 android 的初学者,我正在学习 newboston 教程。我发现了这段用于手势识别的代码。 protected void onCreate(Bundle savedInstanceStat
在我的应用程序中,我有一个位于另一个 View 之上的 View 。用户可以向右滑动顶 View ,使其淡出并“淡入”后 View 。 当用户向右平移并松手时,动画开始,它应该从当前位置平移到新的屏幕
我有一个小问题 em 卡住了..我有一个自定义 UITableViewCell,在它的 textView 上我添加了 2 个手势, UITapGesture 和 UISwipeGesture..点击手
我正在尝试从 SwiftUI 的左侧识别 EdgePan。我知道有一些手势,但无法将它们应用到整个屏幕。 (尝试使用 DragGesture)。是否可以在 SwiftUI 中实现 EdgePan?或者
在开发应用程序时,我遇到了平移手势识别器过多的问题。我的第一个平移手势识别器位于 RecipeSearchVC 的父级 MainViewController 上。这个手势识别器向左或向右滑动整个 Vi
我正在尝试创建一个应用程序来复制 Apple 的照片应用程序 (iPhone) 的缩放、平移和滚动照片图像的功能。 (我也想在查看 pdf 和其他文档时使用相同的控件。)我得到了点击手势来显示/隐藏导
我是 Swift 的初学者,正在尝试向我的 UIView 添加滑动手势识别器。我已将渐变 CALayer 插入到索引 0 以具有渐变背景。 我的问题是: 左右滑动手势可以正常工作,但向下滑动手势不起作
目前我在带有 Customscrollview 的列中使用 photoview(类似于 flutter 的交互式查看器)小部件。所以基本上我有一个应用程序链接 instagram 提要。然而,捏合缩放
在 WP8 应用程序中,我有一个 ListBox 绑定(bind)到一个带有网格的 ItemsSource,因为它是 ItemsPanelTemplate。根据用户选择,网格的布局可能每次都不同(不同
我尝试了几个具有不同 SDK 版本(2.1 和 2.3)的模拟器,但都没有安装 Gestures Builder 应用程序。 有什么想法吗? 最佳答案 我必须安装它。 在 Eclipse 中 文件->
我是一名优秀的程序员,十分优秀!