2010-12-13 2 views
16


기본적 I 이미지 버튼을 필요 UIControl 하위 것을 특별히 지정 오브젝트 강조 :
2) 캡슐화 정의 데이터
3 탭 때
1) 컨트롤러의 동작을 호출하는) 자동 (래퍼보기로 이동 해당 사항 없음)

글쎄, 난 UIControl의 서브 클래스로이 모든 것을 가지고 (UIButton를 서브 클래 싱하기 때문에 권장 서브 클래스 UIImageView는 점 1)를 관리하기 어렵게되지 않습니다. 하지만 지금은 그것을 강조하는 올바른 방법은 무엇입니까? 어떤 식 으로든 탭했을 때 컨트롤을 강조하고 싶습니다 (알파의 단순한 순간 축소조차도).

beginTrackingWithTouchendTrackingWithTouch으로는 UIControlEventTouchUpInside 이벤트 만 인식 할 수 없습니다.

컨트롤러의보기 애니메이션? 그것은 나에게 대략적인 해결책이 될 것 같습니다.

간단하고 즉각적인 해결책이 있습니까?

감사 :(

답변

35

나는 UIControls 자동으로 터치 이벤트만을 기준으로, 제대로 자신의 강조 속성을 설정 생각 당신이 필요로하는 특정 알고리즘을 구현하는 -setHighlighted: 메소드를 오버라이드 (override)하는 것입니다.에서

- (void) setHighlighted: (BOOL) highlighted { 
    [super setHighlighted: highlighted]; 
    // Only as an example. Caution: looks like a disabled control 
    self.alpha = highlighted ? 0.5f : 1.0f; 
} 
+4

이 mySubview.userInteractionEnabled = NO를 설정하는 것을 잊지 마세요 (그렇지 않으면 탭 등록없이되지 않습니다 강조 표시됨). –

12

을 최신이 대답을 유지의 이익, 여기 (Costique의 대답에) 스위프트 버전입니다.

override var highlighted: Bool { 
    didSet { 
     alpha = highlighted ? 0.6 : 1.0 // Sets alpha to 0.6 if highlighted, or 1.0 if it's not. 
    } 
} 

또한 UIControl의 디밍을 퇴색하기를 원할 수도 있습니다. 이렇게하려면 제대로 정의 색조 색상을 사용할 수 있습니다 UIControl의 파단을 강조하기 위해이

override var highlighted: Bool { 
    didSet { 
     UIView.animateWithDuration(0.25) { _ in 
      self.alpha = self.highlighted ? 0.6 : 1.0 
     } 
    } 
} 
+0

나는 터치로 인한'didSet'을 사용하는 것이 지연되는 것을 발견했습니다. 'set (highlighted) {'잘 작동했다. – Sam

0

같은 애니메이션 블록에 알파 할당을 배치합니다. init 방법 어딘가에이를 사용하거나 사용하기 위해 awakeFromNib 당신은 always template에 렌더링 모드 이미지를 변경해야합니다

self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
self.backgroundImageView.image = [self.backgroundImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
self.tintColor = [UIColor zst_blueColor]; // Use custom instead of system-defined color 

을 그래서 그 대신 alpha 값 우리가 색조 색상을 변경할 수 있으며이 자동으로 UIImageView 파단이 변경됩니다 변화. setHighlighted: 방법 당신은 어두운 색으로 텍스트와 색조 색상을 변경할 수 있습니다 : 당신이 어떤 파단이있는 경우

- (void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 
    UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor]; 
    self.tintColor = tintColor; 
    self.titleLabel.textColor = tintColor; 
}