【问题标题】:UIView alpha problemUIView alpha 问题
【发布时间】:2009-07-13 17:26:59
【问题描述】:

我在设置 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。滑块的值不会改变。我想要由
设置的 OverlayView 的 alpha 属性 当 UISlider 对象的 hidden 属性发生变化时,sliderValueChanged 方法保持不变。

关于我做错了什么有什么建议吗?谢谢。

【问题讨论】:

    标签: iphone cocoa-touch uiview alpha


    【解决方案1】:

    好吧,首先添加一个断点,看看当你隐藏你的滑块时是否调用了sliderValueChanged:方法,这似乎是这种情况,当你隐藏它时滑块值被重置为0。 (似乎是怎么回事,尽管它是一个猜测,但不能真正告诉不看和单步执行代码)。如果我提到的是这种情况,那么只需在方法中有一个条件 (if(!slider.HIDDEN)

    【讨论】:

    • 谢谢。我已经尝试过了。 sliderValueChanged: 方法按预期工作。滑块保持其值。 sliderValueChanged:很简单。 - (void) sliderValueChanged: (id)sender { //min = 0.2 //max = 1.0 UISlider *control = (UISlider *)sender;浮动 theValue = control.value; theValue = -1.0 * (theValue - 1.0) + 0.01; self.overlayView.alpha = theValue;需要注意的是:代码在 iPhone 模拟器中运行时按预期工作。在设备上执行时会出现问题。
    【解决方案2】:

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

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

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

    【讨论】:

    • 如果这就是您的答案,请将其标记为答案(可以回答您自己的问题)。
    猜你喜欢
    • 2013-09-25
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多