2009-12-26 8 views
4

사용자가 표준보기에서 UILabel을 터치하면 MapView 콜 아웃과 같은 기능을 수행 할 수 있기를 원합니다. 이것은지도보기가 아닙니다! 또는 새로운 UIView 위로 마우스를 가져갈 수 있습니까?UIView 콜 아웃 버블

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

감사합니다,

답변

1

비슷한 기능을 수행 할 수있는 다운로드 가능한 코드는 this answer입니다.

0

내 접근 방식은, 서브 클래스의 UIView (물론 고정 된 크기의 거품에만 유용) 거품의 스타일에서, PNG 이미지를 만들고있는 UIView의 배경 경우에이 이미지를 그릴 것 그것은 만들었습니다, 나는 또한 UILabel 또는 UIImage를 추가하고 싶은데, 텍스트 또는 이미지 표시 여부에 달려 있습니다.

가변 크기의 이미지를 만들고 싶다면 Quartz2D를 사용하여 원하는 사각형을 그립니다. 이것이 더 많은 작업이긴하지만 제대로 완료되면 더 확장 가능한 구성 요소로 끝납니다.

다음 단계는 UILabel을 서브 클래스 화하고 touchesBegan (UIResponder) 메소드에 응답하는 메소드를 추가하는 것입니다.이 메소드는 터치 될 때마다 호출됩니다. 그런 다음 사용자 정의보기를 만들어 사용자에게 표시 할 수 있습니다. 일반적으로 나는 UILabel/UIView가 이것을 지원한다고 생각하지 않지만 대표자를 생성한다고 말하고 싶다.

3

최근에이 작업을 수행했습니다.

하나의 외부보기 (배경 그리기 및 거품 해제)와 하나의 내부 (거품 자체 그리기)의 두 가지 UIView 하위 클래스가 필요합니다. 내 IMPBubbleView 및 IMPBubbleInternalView를 호출했습니다.

IMPBubbleView에서는 자체 UIWindow 크기로 설정 한 다음 자신을 윈도우의 하위보기로 추가합니다. 호출자는 거품이 가리켜 야하는 직사각형을 전달해야합니다. 즉, convertRect : toView : (UIView의 메소드)를 수행하고 IMPBubbleView를 전달하여 창에있는 위치를 찾으십시오.

IMPBubbleView는 IMPBubbleInternalView 개체를 만들고 자체의 하위보기로 추가합니다.

거품이 직사각형 아래 또는 위쪽으로 그려지는 곳이 있으면 거품이 나오지 않아 문제가 해결됩니다. 거품이 화면 밖으로 나오지 않습니다. 버블 뷰는 전달 된 UIView 객체를 가져 와서 표시 할 수 있습니다. 가장 재사용 가능한 API가됩니다. 그런 다음이보기의 크기를 요청할 수 있습니다. 몇 가지 간단한 수학은 IMPBubbleInternalView의 bubbleOnTop 속성을 설정합니다.

실제로 버블 그 자체를 그리기 위해 저는 매트 젬멜 코드 (http://mattgemmell.com/source에 있음) 중 일부를 버블 아웃 라인의 경로를 만들기 위해 이식했습니다. 나는 다음 색상으로 그라데이션으로 채워진 :

CGFloat locations[5] = { 0.0, 0.5, 0.65, 0.65, 1.0 }; 
CGFloat components[20] = { 0.0, 0.0, 0.0, 1.0, // Start color 
          58.0/255, 58.0/255, 58.0/255, 1.0, 
          58.0/255, 58.0/255, 58.0/255, 1.0, 
          91.0/255, 91.0/255, 91.0/255, 1.0, 
          144.0/255, 144.0/255, 144.0/255, 1.0 }; // End color 

당신이 IMPBubbleInternalView을 표시 할 때, 당신은 페이드를 할 수 있도록하기 위해 코어 애니메이션을 사용하거나 약간의 확대는 감소, 또는 무엇 이건.

마지막으로, 배경을 그리는 IMPBubbleView에서 탭을 처리해야합니다. 여기를 두 드리면 거품이 사라질 것입니다. touchesEnded : withEvent :를 재정의하고 터치 객체에서 locationInView : 메소드를 사용하여 거품 외부에있는 탭을 처리하는지 확인합니다.

나는 그것이 모든 것에 관한 것이라고 생각합니다. 나는 버튼 추가를위한 많은 것들을 가지고 있었다. (나는 복사/붙여 넣기 메뉴를 에뮬레이트하고 있었다.)

관련 문제