0

지금 iOS 응용 프로그램을 만들고 있는데 단순히 "문자 삭제"로 UILabel에서 문자를 제거하는 기능을 구현하고 싶습니다. 문제는 UILabel의 개별 문자에 제스처 인식기를 추가하는 것입니다. 나는 이미 웹에서 이걸 찾았고 아무것도 가지고 있지 않다. 분명히 말하면, 나는 전체 레이블에 제스처 인식기를 추가하지 않고 개별 편지에 추가하고 싶다. 어떤 도움이라도 대단히 감사합니다.UILabel의 개별 문자에 UIGestureRecognizer 추가

감사

답변

1

가장 쉬운 방법은 문자의 위치를 ​​동적으로 계산하는 것입니다.

CGSize textSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:size] 
        constrainedToSize:constrainedSize 
         lineBreakMode:NSLineBreakByWordWrapping]; 

그래서 당신은 당신이 각 레이블에 사용하는 글꼴과 크기의 편지에 대한 크기를 얻을 수 있으며, 각 문자에 대한 대략적인 중심을 얻기 위해 [stringInstance length] 속성과 [UILabel numberOfLines] 속성을 사용 :이 옵션을 사용 레이블, 각 레이블 거기

- (NSString*)letterForPoint:(CGPoint)tapCenter inLabel:(UILabel*)label; 

당신은 각 문자에 대한 대략적인 중심을 계산하는 데 모든 사용에 대한 메소드를 호출 및 오류에 대한 selectableRange를 추가하고 올바른 사용자가 X +로 응답에서 간단한 tapGestureRecognizer를 사용 - 20 픽셀, y + 20 픽셀.

Apple은 40 픽셀보다 작은 선택 가능한 경계가있는 항목은 사용자에게 완전히 짜증나게되므로 글꼴 크기는 실제로 사용자 상호 작용에 상당히 커야한다고 말합니다.

+0

[label setSizeToFit : NO]를 설정해야합니다. , 그러나 크기는 연극 적으로 내가 아는 한 그것을 고려한다. –

0

내가 제대로 이해하고 있다면, 그것은 UILabel의 이해를 만들 것 서브 클래스처럼 들린다.

LetterLabel: UILabel 클래스 을 만들고 init에서 GestureRecognizer를 자체 설정하십시오. 당신이 당신의 편지를 만들 때

그런 다음 각각의 하나는 인식기가

LetterLabel *firstLetter = [[LetterLabel alloc] init] 
LetterLabel *secondLetter = [[LetterLabel alloc] init] 
+0

전체 UILabel의 텍스트가 필요하기 때문에 그럴 수 없습니다. 너무 많은 라벨을 관리하는 것이 어려울 것이며 나는 전체 텍스트를 얻을 수 없다. 또한 성능이 크게 저하됩니다. – virindh

+0

각 문자를 단어 배열에 추가 할 수 있습니다. –

0

UIGestureRecognizer 만에 UIView 또는 그 서브 클래스 (아담 제안처럼, 예를 들어 UILabel의)에 적용 할 수 있습니다에 부착해야합니다. 퍼포먼스가 걱정된다면, 다음 단계는 다음과 같을 것입니다 :

1) UILabel과 같은 뷰의 커스텀 구현을 생성하기 위해 UIView를 서브 클래스 화하십시오.

2) drawInRect에서에 사용자 지정 레이블의 문자열을 그립니다 방법

3) 사용하여 touchesBegan : withEvent :,는 touchesMoved : withEvent : 및 touchesEnded : withEvent : 이동하기 위해 손가락의 위치를 ​​추적하는 방법 받침 문자열의 문자를 다시 그립니다.

편집 : 또는

, 각 계층은 문자열에서 문자를 포함 할 수있다 (손가락의 위치를 ​​추적 할 사용자 지정 라벨에 하나 UIPanGestureRecognizer를 사용하고 사용자 지정 레이블의 범위 내에서 서브 레이어를 이동할 수). 이런 식으로 Core Animation을 사용하여 캐릭터를 애니메이션으로 만들 수 있습니다 (즉, "dropping"효과 생성).

+0

여기에 어떤 종류의 예가 있습니까? 당신이 제안한 것에 관해서 완전히 명확하지 않습니다. 죄송합니다. – virindh

+0

@ user1418074 UIView 또는 하위 클래스에 문자열 그리기 : http://stackoverflow.com/a/12358605/272302 (CALayer에서 문자열 그리기는 매우 유사합니다 ... CALayer의 그리기 방법은 CGContextRef를 제공합니다. http : // stackoverflow.com/questions/2209734/add-text-to-calayer). 그것은 드로잉 코드를 도와야합니다. – RyanM

+0

@ user1418074 이것은 CALayers를 생성하고 부모 레이어에 추가하는 데 도움이됩니다 (이 예제의 부모 레이어는 사용자 정의 레이블과 관련된 레이어입니다). http://www.raywenderlich.com/2502/ introduction-to-calayers-tutorial – RyanM