0

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

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

-(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 プロパティを切り替えようとすると、問題が発生します。.hidden プロパティを YES に変更すると、

theSlider.hidden = YES;

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

私が間違っていることに関する提案はありますか?ありがとう。

4

2 に答える 2

0

アップデート。OverlayViewクラスに変更を加えました。OverlayViewは、UIViewのサブクラスです。次のように、drawRect:(CGRect)rectメソッドをオーバーライドします。

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

これですべてが機能します。これで問題が解決する理由がわかりません。drawRect:特にオーバーライドされない限り、UIViewのサブクラスによって呼び出されませんか?

于 2009-07-13T19:46:14.983 に答える
0

まず、ブレークポイントを追加して、スライダーを非表示にしたときに、sliderValueChanged: メソッドが呼び出されるかどうかを確認します。これは、スライダーを非表示にすると、スライダーの値が 0 にリセットされるようです。(何が起こっているようですが、それは推測ですが、コードを見たりステップスルーしたりしないと本当にわかりません)。私が言及したことが当てはまる場合は、メソッドに条件を設定するだけです (if(!slider.HIDDEN)

于 2009-07-13T17:33:09.370 に答える