я сделал синий шар, который можно таскать в красный круг путь: Detect контакт, когда нажать на CAShapeLayer в Swift
Функция перетаскивания работает прекрасно, НО! Он работает везде, где я нажимаю на экран, и я хочу, чтобы он перетащил только, когда я нажимаю на синий шар.
Это мой код до сих пор:
override func viewDidLoad() {
super.viewDidLoad()
circlePath2 = UIBezierPath(arcCenter: CGPoint(x: earthX,y: earthY), radius: CGFloat(10), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
shapeLayer2.path = circlePath2.CGPath
shapeLayer2.fillColor = UIColor.blueColor().CGColor
shapeLayer2.strokeColor = UIColor.clearColor().CGColor
shapeLayer2.lineWidth = 7
view.layer.addSublayer(shapeLayer2)
let dragBall = UIPanGestureRecognizer(target: self, action:#selector(ViewController.dragBall(_:)))
view.addGestureRecognizer(dragBall)
}
@IBAction func dragBall(recognizer: UIPanGestureRecognizer) {
let point = recognizer.locationInView(self.view)
let earthX = Double(point.x)
let earthY = Double(point.y)
let midViewXDouble = Double(midViewX)
let midViewYDouble = Double(midViewY)
let angleX = (earthX - midViewXDouble)
let angleY = (earthY - midViewYDouble)
angle = atan2(angleY, angleX)
let earthX2 = midViewXDouble + cos(angle)*100
let earthY2 = midViewYDouble + sin(angle)*100
circlePath2 = UIBezierPath(arcCenter: CGPoint(x: earthX2,y: earthY2), radius: CGFloat(10), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
shapeLayer2.path = circlePath2.CGPath
}
Я пытался добавить код в функции dragBall, как будто Постулаты: (Он обнаруживает, если пользователь прикасается точно на синий шар)
И это сработало, но я могу перетащить его только тогда, когда мое прикосновение не покидает положение синего шара, например, если я хочу начать касаться мяча только тогда, когда я прикасаюсь к нему - могу, но продолжаю двигаться, когда мое перетаскивание находится где-то еще в scree n - Я не могу.
Ярлык: Начните перетаскивать мяч только тогда, когда я касаюсь его & Держите перетаскивание, когда мое касание находится где угодно на экране.
Можете ли вы привести пример? когда я изменяю UIPanGestureRecognizer на UIGestureRecognizerStateBegan дает мне ошибку – Eliko
Но мяч не является UIView, его CAShapeLayer – Eliko
Это та же концепция. Получите рамку слоя формы, проверьте, находится ли касание внутри рамки, затем разрешите (или запретить) распознаватель жестов начать. – daltonclaybrook