UISwipeGestureRecognizer 工作异常
UISwipeGestureRecognizer working weird
在我的 UiView
中,我有一个名为 'container' 的 subView
,如果用户向上或向下滑动,它应该执行旋转动画。
基本上它就像一个轮子,如果用户向下滑动轮子,向下滑动一定程度,同时向上滑动执行相反的动作。
这是我的 viewDidLoad 代码:
override func viewDidLoad() {
super.viewDidLoad()
//Swipe Gesture Recognizers Setup
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeUp(_:)))
swipeUp.direction = .up
swipeUp.delegate = self as? UIGestureRecognizerDelegate
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeDown(_:)))
swipeDown.direction = .down
swipeDown.delegate = self as? UIGestureRecognizerDelegate
view.addGestureRecognizer(swipeDown)
view.addGestureRecognizer(swipeUp)
}
这些是向上或向下滑动的 2 个功能:
func swipeUp(_ sender: UISwipeGestureRecognizer) {
print("Swiped Up")
UIView.animate(withDuration: 1) {
self.borderContainer.transform = CGAffineTransform(rotationAngle: 0)
}
}
func swipeDown(_ sender: UISwipeGestureRecognizer) {
print("Swiped Down")
UIView.animate(withDuration: 1) {
self.borderContainer.transform = CGAffineTransform(rotationAngle: 45)
}}
一切正常,控制台在每次执行操作时打印滑动方向但是(是的,有一个但是!)它在每个方向上只调用一次相关函数。
也就是说,如果我向下滑动,那么我只能向上滑动...
我希望它能够在用户需要的任何时候继续向下或向上滑动...
我做错了什么?
我读到了有关 UIGestureRecogniser 与视图一起旋转的信息,因此它不再可用,但我应用了将手势识别器应用于 superView 而不是我正在制作动画的视图的解决方案...
非常感谢任何帮助!
仔细看看您的向下滑动功能。每次向下滑动时都设置相同的值。
如果你想每次都改变它,你需要在当前角度上增加 45度。否则会一直在原来的位置。
尝试使用borderContainer.transform.rotated(by: 45)
.
CGAffineTransform 只为 rotation.Keep 选择 最短路径 请记住,如果旋转 something.Your 滑动就可以了但您需要稍微修改旋转代码才能使其正常工作。
在我的 UiView
中,我有一个名为 'container' 的 subView
,如果用户向上或向下滑动,它应该执行旋转动画。
基本上它就像一个轮子,如果用户向下滑动轮子,向下滑动一定程度,同时向上滑动执行相反的动作。
这是我的 viewDidLoad 代码:
override func viewDidLoad() {
super.viewDidLoad()
//Swipe Gesture Recognizers Setup
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeUp(_:)))
swipeUp.direction = .up
swipeUp.delegate = self as? UIGestureRecognizerDelegate
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeDown(_:)))
swipeDown.direction = .down
swipeDown.delegate = self as? UIGestureRecognizerDelegate
view.addGestureRecognizer(swipeDown)
view.addGestureRecognizer(swipeUp)
}
这些是向上或向下滑动的 2 个功能:
func swipeUp(_ sender: UISwipeGestureRecognizer) {
print("Swiped Up")
UIView.animate(withDuration: 1) {
self.borderContainer.transform = CGAffineTransform(rotationAngle: 0)
}
}
func swipeDown(_ sender: UISwipeGestureRecognizer) {
print("Swiped Down")
UIView.animate(withDuration: 1) {
self.borderContainer.transform = CGAffineTransform(rotationAngle: 45)
}}
一切正常,控制台在每次执行操作时打印滑动方向但是(是的,有一个但是!)它在每个方向上只调用一次相关函数。 也就是说,如果我向下滑动,那么我只能向上滑动...
我希望它能够在用户需要的任何时候继续向下或向上滑动...
我做错了什么?
我读到了有关 UIGestureRecogniser 与视图一起旋转的信息,因此它不再可用,但我应用了将手势识别器应用于 superView 而不是我正在制作动画的视图的解决方案...
非常感谢任何帮助!
仔细看看您的向下滑动功能。每次向下滑动时都设置相同的值。
如果你想每次都改变它,你需要在当前角度上增加 45度。否则会一直在原来的位置。
尝试使用borderContainer.transform.rotated(by: 45)
.
CGAffineTransform 只为 rotation.Keep 选择 最短路径 请记住,如果旋转 something.Your 滑动就可以了但您需要稍微修改旋转代码才能使其正常工作。