ich einen blauen Ball gemacht, die in einem roten gezogen werden kann kreiste Pfad: Touch Erkennen Sie, wenn Sie auf CAShapeLayer in Swift
Die Funktion des Ziehens groß arbeitet, ABER! Es funktioniert, wo immer ich auf den Bildschirm klicke, und ich möchte es ziehen nur, wenn ich auf den blauen Ball klicke.
Dies ist mein Code so weit:
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
}
Ich habe versucht, den Code an die dragBall Funktion hinzuzufügen, als ob statment: (Es erkennt, ob der Benutzer genau auf die blaue Kugel berührt)
if ((point.x >= circlePath2.currentPoint.x - circlePath2.bounds.width/2) && (point.y <= circlePath2.currentPoint.y + circlePath2.bounds.height/2)) && ((point.y >= circlePath2.currentPoint.y - circlePath2.bounds.height/2) && (point.y <= circlePath2.currentPoint.y + circlePath2.bounds.height/2)){
Und es hat funktioniert, aber ich kann es nur ziehen, wenn meine Berührung nicht verlassen, die blaue Kugel Position, zum Beispiel, wenn ich den Ball starten will berühren nur, wenn ich ihn berühren - ich kann, aber halte sie bewegen, wenn mein Ziehen ist irgendwo anders im Geröll n - Ich kann nicht.
Shortcut: Beginnen Sie, den Ball nur zu ziehen, wenn ich ihn berühre & weiterziehen, wenn meine Berührung irgendwo den Bildschirm ist.
Können Sie ein Beispiel geben? wenn ich den UIPanGestureRecognizer zu UIGestureRecognizerStateBegan ändere gibt mir ein Fehler – Eliko
Aber der Ball ist kein UIView, sein CAShapeLayer – Eliko
Es ist das gleiche Konzept. Besorgen Sie sich den Rahmen der Formebene, prüfen Sie, ob sich die Berührung innerhalb des Rahmens befindet, und erlauben Sie dann (oder verbieten Sie), dass die Gestenerkennung beginnt. – daltonclaybrook