1.按住拖动视图
private func gestureSetup() {
let colorView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
colorView.backgroundColor = UIColor.red
view.addSubview(colorView)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(colorViewPan(gesture:)))
colorView.addGestureRecognizer(panGesture)
}
@objc private func colorViewPan(gesture: UIPanGestureRecognizer) {
if gesture.state == .began {
print("pan began")
} else if gesture.state == .changed {
if let panView = gesture.view {
// 手势移动的 x和y值随时间变化的总平移量
let translation = gesture.translation(in: panView)
// 移动
panView.transform = panView.transform.translatedBy(x: translation.x, y: translation.y)
// 复位,相当于现在是起点
gesture.setTranslation(.zero, in: panView)
}
} else if gesture.state == .ended {
print("pan ended")
}
}
主要参考博客:iOS 触控事件 UITouch 和手势识别 UIGestureRecognizer - 稀土掘金
参考博客:
ios - 关于拖动手势简单应用场景 - 稀土掘金
UIPanGestureRecognizer进行视图滑动并处理手势冲突 - 稀土掘金
2.判断某个视图(点)是否移动到另一个视图上,移动到另一个视图里当前视图就消失
//MARK: - 六个选项视图
let testView = UIView()
func addSixView(){
testView.backgroundColor = .yellow
view.addSubview(testView)
testView.snp.makeConstraints {
make in
make.center.equalToSuperview()
make.width.height.equalTo(300)
}
}
//MARK: - 拖动视图
private func gestureSetup() {
let colorView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
colorView.backgroundColor = UIColor.red
view.addSubview(colorView)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(colorViewPan(gesture:)))
colorView.addGestureRecognizer(panGesture)
}
@objc private func colorViewPan(gesture: UIPanGestureRecognizer) {
if gesture.state == .began {
print("pan began")
} else if gesture.state == .changed {
if let panView = gesture.view {
// 手势移动的 x和y值随时间变化的总平移量
let translation = gesture.translation(in: panView)
// print(translation)
let point = CGPoint(x: panView.frame.origin.x + 50, y: panView.frame.origin.y + 50)
if testView.frame.contains(point) {
panView.backgroundColor = .green
print("进来")
}else{
panView.backgroundColor = .red
print("出去")
}
print(panView.frame.origin)
if panView.frame.origin.x <= 0 && translation.x < 0{
return
}
// 移动
panView.transform = panView.transform.translatedBy(x: translation.x, y: translation.y)
// 复位,相当于现在是起点
gesture.setTranslation(.zero, in: panView)
}
} else if gesture.state == .ended {
if let panView = gesture.view {
let point = CGPoint(x: panView.frame.origin.x + 50, y: panView.frame.origin.y + 50)
if testView.frame.contains(point) {
gesture.view?.removeFromSuperview()
testView.backgroundColor = .black
print("进来end")
}
}
print("pan ended")
}
}
参考博客:
iOS判断当前点击的位置是否在某个视图上