置换所有用户 UIGestures
Displace ALL user UIGestures
我有一个占满屏幕一半的 UIScrollView。在另一半,我有另一个 UIView。
当用户在 UIView 中点击、平移、捏合时;我希望这些手势在 UIScrollView 中生效,就像它们发生在那里一样。
这可能吗?
免责声明:这是一个相当轻量级的解决方案,但根据您想要实现的目标,它可能已经足够了。
您可以尝试子类化 UIScrollView
以提供一些自定义识别,以识别任何给定的触摸事件是滚动视图框架的 "in" 还是 "out",并简单地声明它 "in" 每当触摸发生在屏幕的下半部分,或任何其他 "control area" 您想要的地方。
class CustomScrollView: UIScrollView {
var targetFrame: CGRect? // set this to the frame of your "Other View"
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return targetFrame?.contains(point) == true
}
}
注意:如果您不提供 CGRect
而只是 return true
,则在屏幕上任意位置的拖动或捏合手势都会在 scrollView 上注册。
我创建了一个名为 PassGesturesView 的 UIView,它覆盖了 hitTest 方法。接收手势的 UIView,必须扩展它:
//
// PassGesturesView.swift
// pass-gestures
//
// Created by Sergio Rodríguez Rama on 23/11/2019.
// Copyright © 2019 Sergio Rodríguez Rama. All rights reserved.
//
import UIKit
class PassGesturesView: UIView {
var sisterView: UIView?
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return sisterView
}
// MARK: - Init
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
然后,只需将滚动视图(或您要发送手势的任何其他 UIView)设置为您的 PassGesturesView 的姐妹视图。
passGesturesView.sisterView = scrollView
我有一个占满屏幕一半的 UIScrollView。在另一半,我有另一个 UIView。
当用户在 UIView 中点击、平移、捏合时;我希望这些手势在 UIScrollView 中生效,就像它们发生在那里一样。
这可能吗?
免责声明:这是一个相当轻量级的解决方案,但根据您想要实现的目标,它可能已经足够了。
您可以尝试子类化 UIScrollView
以提供一些自定义识别,以识别任何给定的触摸事件是滚动视图框架的 "in" 还是 "out",并简单地声明它 "in" 每当触摸发生在屏幕的下半部分,或任何其他 "control area" 您想要的地方。
class CustomScrollView: UIScrollView {
var targetFrame: CGRect? // set this to the frame of your "Other View"
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return targetFrame?.contains(point) == true
}
}
注意:如果您不提供 CGRect
而只是 return true
,则在屏幕上任意位置的拖动或捏合手势都会在 scrollView 上注册。
我创建了一个名为 PassGesturesView 的 UIView,它覆盖了 hitTest 方法。接收手势的 UIView,必须扩展它:
//
// PassGesturesView.swift
// pass-gestures
//
// Created by Sergio Rodríguez Rama on 23/11/2019.
// Copyright © 2019 Sergio Rodríguez Rama. All rights reserved.
//
import UIKit
class PassGesturesView: UIView {
var sisterView: UIView?
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return sisterView
}
// MARK: - Init
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
然后,只需将滚动视图(或您要发送手势的任何其他 UIView)设置为您的 PassGesturesView 的姐妹视图。
passGesturesView.sisterView = scrollView