2017-10-24 3 views
-2

지도의 이미지 (장소 개요, 건물 등)를 이미지보기에 통합해야합니다. 지도에 선택할 수있는 장소가 있습니다. 일반적으로 이미지에는 선택 가능한 20-25 개 장소가 있습니다. 장소의 모양은 서로 다릅니다.UIImageView - 이미지 뷰 내에서 어떤 모양이든 클릭 할 수있는 영역을 만드는 방법은 무엇입니까?

html에는 이러한 종류의 작업을 수행하는 데 map 태그가 있습니다. iOS 기본 플랫폼에서이를위한 솔루션이 필요합니다. 어떤 제안이나 도움이 될 것입니다!

+0

지금까지 어떤 시도를 했습니까? – RaffAl

+0

아직 로직을 코딩하지 않았습니다. 이미 존재하는 것이 있는지 검색하기. 장소 경계에 베 지어 경로를 사용하려고합니다. 곧 몇 가지 코드를 작성합니다. – jegadeesh

답변

1

키 아이디어 :UITapGestureRecognizerUIImageView에 추가 할 수 있습니다. 각 탭에 대해 실행되는 selector 설정. selector에서 탭이 완료된 좌표를 확인할 수 있습니다. 좌표를 행사할 수있는 조건을 만족하는 좌표가 있다면 작업을 실행할 수 있습니다.

제스처 인식기를 추가 :

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImgViewTap:)]; 
[singleTap setNumberOfTapsRequired:1]; 

[yourImgView addGestureRecognizer:singleTap]; 

선택기 설정 :

-(void)handleImgViewTap:(UITapGestureRecognizer *)gestureRecognizer 

{ 
    // this method gonna fire everytime you tap on the 
    // image view. you have to check does the point where 
    // the tap was done, satisfy your path/area condition. 

    CGPoint point = [gestureRecognizer locationInView:yourImgView]; 

    // here point.x and point.y is the location of the tap 
    // inside your image view. 
    if(/*your condition goes here*/) 
    { 
     // execute your staff here. 
    } 
} 

는 희망이 도움이, 해피 IOS 코딩.

+0

제 문제는 먼저 클릭 가능한 영역을 설정해야한다는 것입니다. 그 영역은 직사각형 모양이 아닙니다. 그것은 다각형 모양이며 사용자가 특정 영역 (사용자가 일부 동작을 수행 할 수있는 곳)을 탭할 때 해당 영역을 별도로 강조 표시해야합니다 (경계선을 사용하거나 해당 영역을 강조 표시). 이를 위해 사용자가 탭할 수있는 이미지보기의 영역을 먼저 정의해야합니다. 상상할 수있는 것은 이미지 뷰 내부에 다각형을 정의하고 일단 탭을 만들면 히트 포인트가지도의 모든 다각형에 있는지 비교하는 것입니다. 그 일을하는 데 어떤 아이디어가 있습니까? – jegadeesh

+0

ploygon의 경우 볼록한 선체를 먼저 만들 수 있습니다. 탭이 만들어지면 포인트가 볼록 선체 내부에 있는지 여부를 결정할 수 있습니다. 포인트가 선체 내부에 있으면 해당 영역에 지정된 작업을 실행합니다. –

+0

예, 알고 있습니다. 그러나, 그것을 어떻게 구현할 것인가? – jegadeesh

0

보기 (ora imageview)가 주어지면 모양의 UIBezierPath를 정의해야합니다. 이보기에 taprecognizer를 추가하고 인식 자 대리인과 동일한보기를 설정하십시오. 대리자 메서드에서 UIBezierPath.contains (_ :)를 사용하여 탭이 경로 내에 있는지 여부를 확인하고 탭 이벤트를 시작할지 여부를 결정합니다.

코드 예제가 필요한 경우 알려주십시오.