pix*_*eak 24 iphone objective-c uibutton uiimage ios
我有一个带有图像的UIButton,并且在其禁用状态下,此图像应具有.3 alpha.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *arrowImage = [UIImage imageNamed:@"arrow.png"];
[button setImage:arrowImage forState:UIControlStateNormal];
// The arrow should be half transparent here
[button setImage:arrowImage forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点?
更新:我注意到,默认情况下,UIButton会在禁用状态下降低图像的alpha值(可能是.5?).但我想知道如何微调这个值.
Eri*_*eaf 17
如果在禁用按钮时设置alpha不起作用,则只需将您禁用的图像设置为所需的alpha值.
刚试过这个,你可以在UIButton上设置alpha,无论状态如何,它都可以正常工作.
self.yourButton.alpha = 0.25;
Run Code Online (Sandbox Code Playgroud)
Ste*_*arp 14
幸得@bryanmac对他有用的答案.我用他的代码作为起点,但发现同样的事情可以在不使用的情况下实现UIImageView
.
这是我的解决方案:
- (UIImage *)translucentImageFromImage:(UIImage *)image withAlpha:(CGFloat)alpha
{
CGRect rect = CGRectZero;
rect.size = image.size;
UIGraphicsBeginImageContext(image.size);
[image drawInRect:rect blendMode:kCGBlendModeScreen alpha:alpha];
UIImage * translucentImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return translucentImage;
}
Run Code Online (Sandbox Code Playgroud)
将按钮的背景图像设置为禁用状态:
UIImage * disabledBgImage = [self translucentImageFromImage:originalBgImage withAlpha:0.5f];
[button setBackgroundImage:disabledBgImage forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
编辑:
我通过UIImage
使用此方法创建类别来进一步完善我的解决方案:
- (UIImage *)translucentImageWithAlpha:(CGFloat)alpha
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
CGRect bounds = CGRectMake(0, 0, self.size.width, self.size.height);
[self drawInRect:bounds blendMode:kCGBlendModeScreen alpha:alpha];
UIImage * translucentImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return translucentImage;
}
Run Code Online (Sandbox Code Playgroud)
将按钮的背景图像设置为禁用状态:
UIImage * disabledBgImage = [originalBgImage translucentImageWithAlpha:0.5f];
[button setBackgroundImage:disabledBgImage forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
您需要两个实例UIImage
,一个用于启用,另一个用于禁用.
困难的部分是为残疾人,你不能设置阿尔法UIImage
.你需要设置它,UIImageView
但按钮不需要UIImageView
,它需要一个UIImage
.
如果您确实想要这样做,则可以在从UIImageView
具有alpha集的图像创建结果图像后将相同图像加载到禁用按钮状态.
UIImageView *uiv = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"];
// get resultant UIImage from UIImageView
UIGraphicsBeginImageContext(uiv.image.size);
CGRect rect = CGRectMake(0, 0, uiv.image.size.width, uiv.image.size.height);
[uiv.image drawInRect:rect blendMode:kCGBlendModeScreen alpha:0.2];
UIImage *disabledArrow = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[button setImage:disabledArrow forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
获得alpha控制的按钮图像需要经过很多工作.可能有一种更简单的方法,但这就是我能找到的.希望有所帮助.
对UIButton进行子类化并扩展该setEnabled:
方法似乎有效:
- (void) setEnabled:(BOOL)enabled {
[super setEnabled:enabled];
if (enabled) {
self.imageView.alpha = 1;
} else {
self.imageView.alpha = .25;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有彻底测试过,但是如果屏幕旋转,确实发现值会重置.在setFrame:
方法中添加相同的代码可以解决这个问题,但是我不确定是否存在其他情况下这个值发生了变化.
小智 5
如果有人需要它,这里有一个 Swift 的答案:
子类 UIButton 和覆盖启用
class MyCustomButton: UIButton {
override var enabled: Bool {
didSet{
alpha = enabled ? 1.0 : 0.3
}
}
Run Code Online (Sandbox Code Playgroud)
将您想要拥有此属性的任何按钮的类设置为“MyCustomButton”(或您选择的任何名称)
@IBOutlet weak var nextButton: MyCustomButton!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39405 次 |
最近记录: |