14

iOS 6 で完全に動作するアプリがあります。この方法で UISlider の親指に点滅効果を設定しました。

-(void)startBlinkingSlider{
    isSliderBlinking = YES;
    isSliderTinted = NO;
    [self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2];
}

-(void)toggleSliderColor{
    if(isSliderBlinking){
        if(isSliderTinted){
            self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        }else{
            self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:255 green:0 blue:0 alpha:1];
        }
        isSliderTinted = !isSliderTinted;
        [self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2];
    }
}

-(void)stopBlinkingSlider{
    isSliderBlinking = NO;
    isSliderTinted = NO;
    self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}

スライダーを呼び出すとstartBlinkingSlider、iOS 6 で赤く点滅し始めます。iOS 7 デバイスでまったく同じアプリを実行しても、何も起こりません。スライダーのつまみは、元の白色のままです。を設定した行にブレークポイントを設定しましたthumbTintColor。デバッガーでは、ここに私が得ているものがあります:

(lldb) po self.effectAmountSlider.thumbTintColor
error: failed to get API lock
(lldb) po self.effectAmountSlider.thumbTintColor
UIDeviceRGBColorSpace 0 0 0 1
(lldb) 

まったく同じコードを入力したところ、最初のコードで奇妙なメッセージが表示されました。ただし、2 番目の結果は正しいです。次に、赤に設定した後、正しい結果も得られます。

(lldb) po self.effectAmountSlider.thumbTintColor
UIDeviceRGBColorSpace 1 0 0 1

デバッガーには正しい値が表示されますが、スライダーに視覚的な変化はありません。まだ白いです、色はまったく変わりません。ここでAppleのドキュメントを検索しました:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Controls.html

UISlider の thumbTintColor が iOS 6 として機能しないことについては何も述べていません。期待どおりに機能し続けるはずです。スレッドを確認したところ、すべてがメイン スレッドで実行されています。toggleSliderColor常にメインスレッド上にあるため、スレッドの問題ではありません。親指の色が機能しないのはなぜですか?

ありがとう、カン。

4

4 に答える 4

19

回避策を発見しました。最初に「setThumbImage:forState:」メソッドを呼び出すと、「thumbTintColor」プロパティが有効になります。

[self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"] 
                  forState:UIControlStateNormal];
self.slider.thumbTintColor = [UIColor blackColor];

iOS シミュレーターのバージョン 7.0 (463.9.4.2) でこれをテストしました。

于 2014-01-28T04:23:09.523 に答える
11

私はたまたまiOS 7 UI Transition Guide今朝再び を読んで、 の下の声明につまずいたSlider. EITHER maximumTrackTineColorORthumbTintColorが nil の場合、両方のプロパティが無視されます。それで、すべての色合いを設定しようとしましたが、親指はまだ白です。

これに関するバグ レポートを入力しました - #15277127 - 独自のバグを入力する場合は参照してください。バグ報告が多ければ多いほど、Apple がすぐに修正する可能性が高くなります。

編集:Appleは私のバグを別のものに複製しました-これは明らかに少し前に知られていました.

于 2013-10-21T13:40:51.127 に答える
10

@aaronstiの回答に基づいて、次のことがうまくいくことがわかりました。サムイメージをに設定しnilても効果はありませんでした。

  [_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal];
_slider.minimumTrackTintColor = minTintColor;
_slider.thumbTintColor = thumbTintColor;
于 2015-02-09T17:37:11.457 に答える