我有一个未知数量的子视图,可以显示在名为mainCanvasView
的主视图上。我的目标是,当用户在子视图上进行平移手势时
mainCanvasView
现在,我已经完成了以下工作:
//Added a pan gesture hanlder to mainCanvasView
let panGesture = UIPanGestureRecognizer(target: self, action:#selector(self.handlePanGesture(gesture:)))
self.mainCanvasView.addGestureRecognizer(panGesture)
//Define the method for handling gestures
func handlePanGesture(gesture: UIPanGestureRecognizer) {
if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed {
var appliedView = UIView(frame: view.frame)
viewLooper: for view in self.mainCanvasView.subviews {
let point = gesture.location(in: view)
if (view.hitTest(point, with: nil) != nil) { //Find the view that the finger interacted with
appliedView = view
break viewLooper
}
}
self.mainCanvasView.bringSubview(toFront: appliedView)
let translation = gesture.translation(in: view)
appliedView.transform = (appliedView.transform).translatedBy(x: translation.x, y: translation.y)
gesture.setTranslation(CGPoint(x: 0, y: 0), in: appliedView)
}
}
正如gif所示,在移动单个子视图时很好,当子视图略微相互重叠时,会产生奇怪的效果,其中两个子视图都会被移动。
非常感谢有关如何解决此问题的任何建议。
答案 0 :(得分:1)
删除平移手势这是更好的解决方案(您可以在此处添加自己的改进)
我使用过preg_match( '/^\s*(create|alter|truncate|drop)\s/i', $query ) ) {
$return_val = $this->result;
种方法
touch
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for view in self.viewMain.subviews {
if let point = touches.first?.location(in: self.view) {
if let viewTouched = self.view.hitTest(point, with: event),viewTouched == view {
viewNew = view
viewNew.center = point
self.viewMain.bringSubview(toFront: view)
print("Tapped")
break
} else {
print("Not Tapped")
}
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let point = touches.first?.location(in: self.viewMain) {
viewNew.center = point
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
viewNew = UIView()
}
是全局viewNew
对象
希望它对你有所帮助
答案 1 :(得分:0)
检查以下项目,它可以获得所需的输出
used - 在图像上捏合并点按手势并在屏幕上移动图像
Link - https://github.com/RockinGarg/Moving-views-.git
触摸处理图像
import UIKit
class objectClass: UIImageView, UIGestureRecognizerDelegate {
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch: UITouch = touches.first!
self.center = touch.location(in: self.superview)
}
}
其他手势功能
//recognizing gestures
func recognizePinchGesture(sender: UIPinchGestureRecognizer) {
sender.view!.transform = sender.view!.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
func recognizeRotateGesture(sender: UIRotationGestureRecognizer) {
sender.view!.transform = sender.view!.transform.rotated(by: sender.rotation)
sender.rotation = 0
}