0

我在设置 UIView 子类对象的 alpha 值时遇到问题。有什么建议么?

我有 UIView 项目,我正在操纵其 alpha 属性来控制亮度。我正在使用 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 的 alpha 值。父对象是 UIViewController 的子类 myViewController。滑块位于名为 SliderView 的第二个 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 对象的 alpha 值重置为 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 回答