这个UIPanGestureRecognizer课程有几个例子.例如,我已阅读此内容,但仍无法使用它...
在我正在处理的nib文件上,我有一个UIView(图像上的白色矩形),我希望用该类拖动:

在我的.m文件中,我放置了:
- (void)setTranslation:(CGPoint)translation inView:(UIView *)view
{
NSLog(@"Test to see if this method gets executed");
}
Run Code Online (Sandbox Code Playgroud)
当我将鼠标拖过时,该方法无法执行UIView.我也试过放置:
- (void)pan:(UIPanGestureRecognizer *)gesture
{
NSLog(@"testing");
}
Run Code Online (Sandbox Code Playgroud)
并且该方法也不会被执行.也许我错了,但我认为这个方法应该像- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event我必须放置该方法的方法一样工作,只要有触摸就会调用它.
我究竟做错了什么?也许我必须绘制与该方法的连接?如果是这样我怎么能这样做?
我正在使用平移手势识别器来关闭 UINavigationController。我正在使用此处的代码,并进行了修改以适合我的 NavigationController,我还将手势识别器添加到容器视图内的实际 VC。
一切正常,除了当我向下滑动时,导航栏会在 y 值 > 0.0 时更改其位置。
我认为正在发生的是导航栏附加到顶部安全区域,当它离开顶部安全区域时,它会自动将自身调整到视图的顶部。
我怎么能简单地实现它,以便导航栏的大小要么延伸到顶部的安全区域下方,要么完全忽略它,而是限制它所在的视图?
以下是图片:
这是我用于 UINavigationController 的代码
//
// PannableViewController.swift
//
import UIKit
class PannableViewController: UINavigationController {
public var minimumVelocityToHide = 1500 as CGFloat
public var minimumScreenRatioToHide = 0.5 as CGFloat
public var animationDuration = 0.2 as TimeInterval
override func viewDidLoad() {
super.viewDidLoad()
// Listen for pan gesture
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(onPan(_:)))
if let lastVC = self.childViewControllers.last {
lastVC.view.addGestureRecognizer(panGesture)
}
}
func slideViewVerticallyTo(_ y: …Run Code Online (Sandbox Code Playgroud) uinavigationbar uinavigationcontroller ios uipangesturerecognizer swift