- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
在 View 上附加和删除 UIGestureRecognizer 的正确方法是什么?
我通常在 -viewDidLoad
中创建和附加 UIGestureReconizers。我应该在 -viewDidUnload
中使用 removeGestureRecognizer
吗?还是它们会自动删除?
例如,创建一个 UIGestureRecognizer 属性并在 viewController 的 init 方法中对其进行初始化,然后在 -viewDidAppear
/-viewDidDisappear
中附加/删除此 gestureRecognizer 属性是否更好? >?
(注意我正在使用 ARC)
谢谢。
最佳答案
基本上,您可以在需要时创建、添加和删除手势识别器。并且“什么时候有意义”取决于一些事情,但通常只取决于你是否将它们保留为 ivars。与 ARC
关键是管理强引用;与 ARC
默认情况下,ivars 很强大。
假设您添加了一个敲击识别器。在这种情况下,您不需要再次访问识别器。我会这样创建它:
-(void)viewDidLoad{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];
}
在这种情况下,您不需要做任何其他事情来管理这个识别器。 View 系统对它有很强的引用。您所要做的就是坐下来等待它调用handleTap:
.当 View 卸载时,这个点击识别器将被释放。
这种情况也不是在 viewWillAppear:
中添加此识别器的好情况。因为不难想象会导致创建多个识别器的一系列事件。
所以从逻辑上讲,如果你想在外观方法中添加一个识别器,你必须在一个 ivar 中保存对它们的某种引用。但这并不总是一个坏主意。一般来说,你想要引用你的识别器的原因是为了帮助 <UIGestureRecognizerDelegate>
的逻辑。方法,如果使用的话。
我个人永远不会在 initWith..
中添加识别器稍后附上的方法。唯一的好处是,您在那里创建的任何识别器都将在 View Controller 的整个生命周期内保留。但是由于识别器很明显是 View 系统的一部分,所以这种混淆了 MVC
。 cocoa 很重要。同样在内存不足的情况下,导航堆栈上的 Controller View 会被清除,但在这种情况下,识别器可能会无缘无故地继续使用内存(不是那些巨大的对象)。
您当然可以在 view(Will/Did)Appear:
中添加识别器方法并在 view(Will/Did)Disappear:
中删除它.不是我的偏好。我不认为这只是因为 modal
显示和删除 View 或导航 push
/pop
碰巧我应该删除并重新添加我的识别器。
我建议几乎总是使用 viewDidLoad
实例化并附加您的识别器。请记住在 viewDidUnload
中消除对它们的任何强引用。在内存不足的情况下提供帮助。再次使用 ARC
在 dealloc 中不需要对 ivars 做任何事情。
关于ios - 附加/删除 UIGestureRecognizers 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104386/
我知道触摸事件可以传递给点击 View 或手势。但在我的演示中有些让我感到困惑: 我的 Root View 中有两个 subview ,一个是 testView(UIView 的子类),另一个是 te
我有一个带有一些手势识别器(ala Clear)的 View 。我应该只为语音用户添加按钮吗? 我考虑过使用提示来表达类似“3 指向右滑动以编辑。向左滑动以删除。向上滑动以创建新的”之类的内容。但似乎
我有两个问题: 我能否实现继承自 UISwipeGestureRecognizer 的手势识别器并将逻辑添加到 UIEvent 处理程序? 我可以在不将它附加到 UIView 的情况下实现 UIGes
我正在开发 iPhone 应用程序,但遇到了手势识别器的问题。 我在一个 View 上添加了一个 UITapGestureRecognizer,然后我用 CABasicAnimation 转换与这个
我有很多类,想要将 UIGestureRecognizer 添加到它们的 UIImageViews 中。 我正确地将一个添加到所有类中。问题是我重复了代码,以便每个类都添加相同的识别器。这些是本地识别
我想在我的 UIPinchGestureRecognizer 完成捏合手势时收到回调。此外,如果知道完成的手势是放大还是缩小,那就太好了。 有人知道使用方法吗?或者采取什么方法? 谢谢! 最佳答案 另
我已经在 View Controller 的 viewDidLoad 上设置了 UITapGestureRecognizer,但不知何故,它会为单次点击触发两次选择器方法。 UITapGestureR
我正在使用 UIPanGestureRecognizer在几个类似卡片的 View 上,让用户在屏幕上移动 View 。他们可以同时放下 3 个手指并拾取 3 张卡片,这非常好,但是,我的某些功能并不
这里给出一个例子,(使用 ARC ) UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init
当我使用 UIGestureRecognizer ,例如,当用户向右滑动时,我想要一个 UIAlertView询问他是否真的要进行向右滑动的 Action 。 我曾尝试这样做,但没有成功。 最佳答案
我有一个子类 UIView ,我们称之为TileView.m/h . 在 TileView.m ,我有以下代码:( [setup] 肯定被调用,我用断点检查过)。 - (void)setup {
我有一个 UIGestureRecognizer附加到 UILabel当稍后进入视野时,它会在屏幕外渲染。进入视野后,点击手势识别器不起作用。如果在 View 中渲染,它工作正常。 任何想法为什么这不
我已经使用 UIPanGestureRecognizer 实现了一些交互式 UIViewController 演示动画,例如平移以呈现 View Controller 。 我现在要做的是允许这种行为通
在我的 tvOS 应用程序中,我有一个 Collection View ,其中包含代表电影的单元格。 我在 View 上附加了 2 个手势识别器: 点击选择即可查看电影详细信息 直接播放影片(使用 A
UIGestureRecognizer 导致未捕获的异常错误。它说无法识别的选择器发送到实例。我正在使用 Swift 3 和 Xcode 8。 这是代码。 import UIKit import UI
我正在制作一个在图像上包含几个图层的应用程序。该效果层是 UIView - EffectsLayerView 的子级。里面有Effect1View、Effect2View和Effect3View,其中
我有两个类,它们都添加了 UIPinchGestureRecognizer 并使用选择器来处理响应手势的代码。注意:手势识别器委托(delegate)可能与此问题无关,但我将其包含在代码中,以防万一。
我正在尝试学习 Swift,这让我很困惑: 假设您要添加手势: faceView.addGestureRecognizer(UIPinchGestureRecognizer(targe
我刚开始使用适用于 iOS 的 Google Maps SDK,但遇到了一些问题。我正在尝试添加以下代码: - (void)viewDidLoad { [super viewDidLoad];
我正在学习 iOS 开发并且正在查看 UIGestureRecognizer 的。 我有一个观点。当您点击该 View 时,我想显示一个 UIPopoverController 并且我还希望它像 UI
我是一名优秀的程序员,十分优秀!