2017-02-16 4 views
0

사용자가 화살표를 그릴 수 있거나 추가 할 수있는 곳에서 앱을 만들려고합니다.이 화살표를 변형 (번역, 회전 등) 할 수 있습니다. 잠시 동안 나는 화살표를 그려서 모든 변형을 만들었지 만, 지금하고 싶은 것은 가장자리를 드래그하여 화살표를 수정할 수있게하는 것입니다.가장자리를 드래그하여보기 변환 (Swift)

화살표를 그리기 위해 높이 20px (화살표 두께)와 너비 400 (화살표 길이)의 UIView를 만듭니다.

func drawArrow(frame: CGRect) { 
    let thicknessArrow = 20 
    let viewHorizontalArrow = UIView() 
    viewHorizontalArrow.frame.origin = CGPoint(x: 100, y: 600) 
    viewHorizontalArrow.frame.size = CGSize(width: 400, height: thicknessArrow) 

    drawDoubleArrow(viewHorizontalArrow, startPoint: CGPoint(x: 0, y: thicknessViewWithArrow/2), endPoint: CGPoint(x: viewHorizontalArrow.frame.width, y: thicknessViewWithArrow/2), lineWidth: 10, color: UIColor.blackColor()) 

} 

그 후, 나는 팬에 UIView의 덕분 변환 끼와 제스처를 회전 할 수 있습니다.

"drawDoubleArrow"함수는 BezierPath로 화살표를 만들고 UIView의 레이어에 추가합니다.

나는이 설명이 충분히 명확 할 것을 희망한다.

해결책을 찾도록 도와 주시겠습니까?

감사합니다.

+0

게시 할 수 있을까요? 그것을 보지 않고 도울 수 없습니다. – dfd

+0

답변 해 주셔서 감사합니다. 화살표를 만드는 방법을 추가했습니다. (변환하는 UIView의 레이어입니다.) – Adz

+0

그게 내가 찾고 있던 것입니다. 나는 대답을 게시 할 것이고, 그것이 당신을 위해 일하는 것이 아니라면 알려주면 나는 그것을 삭제할 것이다. – dfd

답변

0

UIBezierPath은 자신을 인식하지 못하기 때문에 쉽게 제스처로 조작 할 수 없습니다. 그러나 UIView은 제스처를 인식 할 수 있습니다. CALayer 님의 변형 능력과 결합 된 방법은 hitTest()입니다. 원하는 것을 얻을 수 있다고 생각합니다.

// I'm declaring the layer as a shape layer, but depending on how your error thick is, you may need a rectangular one 
let panGesture = UIPanGestureRecognizer() 
var myLayer = CAShapeLayer() 

의 viewDidLoad :

// I'm assuming you've created myBezierPath, an arrow path 
myLayer.path = myBezierPath.cgPath 

// Adding the pan gesture to the view's controller 
panGesture.addTarget(self, action: #selector(moveLayer)) 
self.addGestureRecognizer(panGesture) 

moveLayer : 당신은 화살표에 대한 코드가

func moveLayer(_ recognizer:UIPanGestureRecognizer) { 
    let p = recognizer.location(in: self) 

    // You will want to loop through all the layers you wish to transform 
    if myLayer.hitTest(p) != nil { 
     myLayer.position = p 
    } 
}