2016-07-09 4 views
0

Ich versuche, einen Kreis zu meiner benutzerdefinierten Kameraansicht hinzuzufügen. Ich habe ein Problem, es zu meinem "Berührungspunkt" zu zentrieren, weil es meinen Kreis an der oberen linken Ecke hinzufügt, wenn ich die Berührung Bildschirm, aber wenn ich "CenterPoint" neben ArcCenter mit einigen CGPoint (// Einige Einschränkungen) in der zweiten Zeile des Codes ersetzen, fügt es meinen Punkt rechts CGPoint.Benutzerdefinierte schnelle Kamera Kreis Touch Antwort

Dies ist mein Code so weit:

func pointInCamera(centerPoint:CGPoint){ 


     let circlePath = UIBezierPath(arcCenter: centerPoint, radius: CGFloat(30), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)//This "centerPoint" is the problem I guess    
     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = circlePath.CGPath 

     shapeLayer.fillColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 0.3).CGColor 
     shapeLayer.strokeColor = UIColor(red: 0, green: 191/255, blue: 1, alpha: 0.9).CGColor 
     shapeLayer.lineWidth = 2.0 

     view.layer.addSublayer(shapeLayer) 

    } 

    //Focus camera 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let screenSize = cameraView.bounds.size 
     if let touchPoint = touches.first { 
      let x = touchPoint.locationInView(cameraView).y/screenSize.height 
      let y = 1.0 - touchPoint.locationInView(cameraView).x/screenSize.width 
      let focusPoint = CGPoint(x: x, y: y) 

      let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 

      if let device = backCamera { 
       do { 
        try device.lockForConfiguration() 
        device.focusPointOfInterest = focusPoint 

        pointInCamera(focusPoint) 
        device.focusMode = .AutoFocus 
        device.exposurePointOfInterest = focusPoint 
        device.exposureMode = AVCaptureExposureMode.ContinuousAutoExposure 
        device.unlockForConfiguration() 


       } 
       catch { 
        // just ignore 
       } 
      } 
     } 
    } 
+0

Vielleicht ist das Problem, dass berührt die siri Fern bezüglich statt absolute Berührungen auf einem iOS-Gerät. Also ich denke, der Touch-Standort (0/0) ist auf der aktuell fokussierten Ansicht. – matthiaswitt

+0

Ja, es ist wahr, dass es druckt, dass mein Touch-Standort 0/0 ist, aber wie kann ich es richtig machen? –

+0

Ich verstehe nicht, was Sie tun möchten. Ein Screenshot wäre hilfreich. Ich denke, das Problem liegt in der Zeile, in der du X und Y errechnest: Warum teilst du die Bildschirmgröße? locationInView() sollte den richtigen CGPoint zurückgeben, wo die Berührung passiert ist – matthiaswitt

Antwort

1

Ich habe diese Funktion und es meine touchesBegan Funktion hinzugefügt:

func pointInCamera(centerPoint:CGPoint){ 

     let circlePath = UIBezierPath(arcCenter: centerPoint, radius: CGFloat(30), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true) 

     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = circlePath.CGPath 

     shapeLayer.fillColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 0.3).CGColor 
     shapeLayer.strokeColor = UIColor(red: 0, green: 191/255, blue: 1, alpha: 0.9).CGColor 
     shapeLayer.lineWidth = 2.0 

     view.layer.addSublayer(shapeLayer) 

     delay(0.5) { 
      shapeLayer.removeFromSuperlayer() 
     } 

    } 
Verwandte Themen