2010-12-13 83 views
16


基本上我需要一個圖像按鈕,特別是自定義對象的是:抽頭
2)封裝的自定義數據
3時
1)調用的控制器的動作)由包裝視圖自動移動(不相關)突出一個UIControl子類

好吧,我得到了這一切與UIControl一個子類(因爲繼承UIButton不是推薦的子類UIImageView使得難以管理點1)。 但現在什麼是突出顯示它的正確方法? 我想強調以任何方式輕觸控制(即使是簡單的瞬間減少阿爾法)。

With beginTrackingWithTouch and endTrackingWithTouch我無法識別唯一的UIControlEventTouchUpInside事件。

控制器中的視圖動畫?在我看來,這似乎是一個粗略的解決方案

是否有一個簡單而直接的解決方案?

感謝:(

回答

35

我覺得UIControls自動設置正確的突出特性,僅僅依靠觸摸事件根據你需要的是覆蓋-setHighlighted:方法來實現特定的算法:

- (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(否則自來水不會註冊,沒有高亮將被觸發)。 – 2014-04-23 19:22:57

12

在保持這個答案是最新的利益,這裏是Swift版本(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的調光。要做到這一點,只需將阿爾法分配在一個動畫塊,這樣

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

我發現使用'didSet'觸摸引起的延遲。 'set(突出顯示){'運作得更好 - 但前提是我沒有打電話超級 – Sam 2016-10-12 18:32:28

0

爲了突出UIControl子視圖正常,你可以使用自定義色彩的顏色。要在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; 
} 
相關問題