2017-03-08 5 views
0

사용자가 화면에서 다각형을 이동하고 코너 꼭지점을 드래그하여 모양을 변경하는 방법을 만드는 중입니다. 그런 다음 수정 된 다각형을 다른 장치에 다시 그릴 수 있어야합니다. 따라서 화면의 모든 다각형에 대한 모든 꼭지점의 최종 위치를 가져올 수 있어야합니다.경로 변환 후 UIBezierPath 현재 제어점을 가져올 수 있습니까?

내가 drawRect 함수의 재정의 각 모양에 대한 UIBezierPath를 사용하여 다각형을 그릴 :

이 내가 현재하고있는 중이 것입니다. 그런 다음 사용자가 CGAffineTransformMakeTranslation 기능을 적용하고 xy 좌표 차이를 touchedMoved 함수 덮어 쓰기로 화면 주위로 드래그하도록 허용합니다. 초기 폴리곤이 그려지는 초기 제어점이 있습니다 (here 설명). 하지만 일단 경로 인스턴스가 화면에서 이동하면 해당 값은 변경되지 않으므로 초기 값만 가져올 수 있습니다.

UIBezierPath 인스턴스에서 현재 제어점 세트를 가져올 수있는 프레임이 무연입니까? Core Graphics 프레임 워크에 기본 제공되는 것이 있습니까? 내가 수동으로 그 지점을 추적하지 않도록 노력하고있어. 내가 그리는 다른 방법을 사용하는 것이 좋습니다 경우 :

  • 가 내장 - 감지하는 방법으로 포인트가 다각형 내에있는 경우 (예 :
  • 쉽게 제약을 소개 할 수있는 방법 방법 UIBezierPath#contains 수 있도록 사용자 수 ' t는 사용자가
아이폰 5에 초당 60 프레임에서 실행할 수 있습니다
  • 모든 일을 할 때 쉽게 모든 포인트를 잡아
  • 하는 방법입니다 (나는 볼 수 있도록 전체 폴리곤 필요)이 슈퍼 뷰의 범위를 벗어 다각형을 이동

    시간 내 주셔서 감사합니다!

  • 답변

    1

    변환을 뷰/레이어에만 적용 할 때 경로에서 변환 된 제어점을 가져 오려면 해당 변환을 경로에 적용한 다음 제어점을 가져 오기 만하면됩니다. 같은 뭔가 :

    UIBezierPath* copiedPath = [myPath copy]; 
    [copiedPath applyTransform:[view transform]]; 
    [self yourExistingMethodToFetchPointsFromPath:copiedPath]; 
    

    현재 경로에서 포인트를 잡아 당겨있는 방법은 입력 UIBezierPath에서 다시 가져 오는 점을 사용할 수있는 유일한 API에 불행하게도이다. 그러나 베 지어 경로를 훨씬 간단하게 처리하기 위해 작성한 라이브러리에 관심이있을 수도 있습니다 (PerformanceBezier). 이 라이브러리는 상당히 쉽게 경로에서 포인트를 획득 할 수 있습니다 : 작업 할 경로를 쉽게하기 위해 기능을 추가하는 것 외에도

    for(NSInteger i=0;i<[path elementCount];i++){ 
        CGPathElement element = [path elementAtIndex:n]; 
        // now you know the element.type and the element.points 
    } 
    

    , 그것은 또한 성능을 할 수있는 기존의 API 위에 캐싱 레이어를 추가 훨씬 더 작게 경로로 작업하는 히트. UIBezierPath 메소드에 소비하는 CPU 시간에 따라이 라이브러리는 상당한 개선을 가져올 것입니다. 사용중인 작업에 따라 between 2x and 10x improvement이 보입니다.