2009-07-13 2 views
0

UIViewサブクラスオブジェクトのアルファ値を設定する際に問題があります。助言がありますか?UIView alpha problem

輝度を制御するためのアルファプロパティを持つUIViewプロジェクトがあります。次のように私はUIViewのサブクラスにおいてalphaプロパティの値を設定するUISliderコントロールを使用しています:

-(id)initWithFrame:(CGRect)rect andParent:(id)theParent { 

self = [super initWithFrame: rect]; 

if (self !=nil) { 

    [self setParent:theParent]; 

    theSlider = [[UISlider alloc] initWithFrame: CGRectMake(35.0,400.0,250,0)]; 
    theSlider.minimumValue = 0.2; 
    theSlider.maximumValue = 1.0; 
    theSlider.value = 1.0; 
    theSlider.continuous = YES; 

    UIImage *maximumValueImage = [UIImage imageNamed:@"BrightSun.png"]; 
    UIImage *minimumValueImage = [UIImage imageNamed:@"DimSun.png"]; 

    theSlider.maximumValueImage = maximumValueImage; 
    theSlider.minimumValueImage = minimumValueImage; 

    theSlider.hidden = NO; 
    [theSlider addTarget:parent action: @selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged]; 

    [self addSubview:theSlider]; 

} 

return self; 
} 

親オブジェクトにsliderValueChanged方法は、別のUIViewサブクラスオブジェクト、OverlayViewのアルファ値を変更します。親オブジェクトは、UIViewController、myViewControllerのサブクラスです。スライダは、SliderViewという名前の2番目のUIViewサブクラスにあります。

- (void) sliderValueChanged: (id)sender { 
    //min = 0.2 
    //max = 1.0 
    UISlider *control = (UISlider *)sender; 
    float theValue = control.value; 
    theValue = -1.0 * (theValue - 1.0) + 0.01; 
    self.overlayView.alpha = theValue; 
} 

これは動作するようです。この問題は、UISliderの.hiddenプロパティを切り替えるときに発生します。私はYESに.hiddenプロパティを変更すると、

theSlider.hidden = YES; 

スライダーが消え、しかしOverlayViewオブジェクトのアルファ値が0.0にリセットします。スライダの値は変更されません。
sliderValueChangedメソッドによって設定されたOverlayViewのalphaプロパティが、UISliderオブジェクトの隠されたプロパティが変更されても変更されないようにします。

私が間違っていることについてのご意見はありますか?ありがとう。

答えて

0

まず、ブレークポイントを追加して、スライダ値を非表示にしてスライダ値を0にリセットして、スライダを非表示にしたときにsliderValueChanged:メソッドが呼び出されたかどうかを確認します。 (何が起こっているかのように見える、その推測は難しい、実際にはコードを見て歩いているとはわからない)。もし私が言及した場合は、その場合は、メソッドの条件を持っています(if(!slider.HIDDEN)

+0

おかげ?。スライダは値を保持します。 sl iderValueChanged:非常に簡単です。 - (ボイド)がsliderValueChanged:(ID)、送信者{ \t \t //分= 0.2 \t //最大= 1.0 \t \t UISlider *対照=(UISlider *)差出人。 \t \t float theValue = control.value; \t \t \t \t \t theValue = -1.0 *(theValue - 1.0)+ 0.01; \t \t self.overlayView.alpha = theValue; \t \t 注意事項:コードは、iPhoneシミュレータで実行すると期待どおりに動作します。この問題は、デバイス上で実行されると実現します。 –

0

私はOverlayViewクラスに変更を加えましたオーバーレイビューはUIViewのサブクラスですdrawRect :(CGRect)RECT方法を次のように。。

-(void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
} 

を今すべては、私はこの問題を修正する理由として無知だ作品はのdrawRectです:UIViewののサブクラスによって呼び出されていない、具体的に上書きされない限り

+0

これがあなたの答えを解決した場合は、それを答えとしてマークしてください(あなた自身のQに答えることはOKです)。 – Sam