UIView alpha问题

时间:2009-07-13 17:26:59

标签: iphone cocoa-touch uiview alpha

我在设置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。滑块的值不会改变。我希望由Over设置的OverlayView的alpha属性 sliderValueChanged方法在UISlider对象的hidden属性更改时保持不变。

有关我做错的建议吗?感谢。

2 个答案:

答案 0 :(得分:0)

好吧,首先通过添加一个断点来查看是否在隐藏滑块时调用了sliderValueChanged:方法,而滑块值在隐藏时会重置为0。 (似乎是什么事情发生了,这是一个猜测,不能真正告诉我们没有看到并踩过代码)。如果我提到的是这种情况,那么在方法中只有一个条件(if(!slider.HIDDEN)

答案 1 :(得分:0)

更新。我对OverlayView类进行了更改。 OverlayView是UIView的子类。我重写了drawRect:(CGRect)rect方法,如下所示:

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

现在一切正常。我无法解决为什么这可以解决这个问题。是drawRect:除非特别重写,否则不会被UIView的子类调用?