手动安装m4, autoconf, automake, libtool
2016-03-11 19:45
435 查看
我们知道直接在Storyboard中设置按钮的背景色是不能根据不同状态来更改的,那问题来了,如果我们需要在不同的状态下(比如按钮没有被按下或者被按下),使得按钮呈现不同的背景色怎么办?
比如上图左边是按钮没有被按下时的背景色,右边是按钮被按下时的背景色。
第一种方案
我们知道按钮的Image属性可以在不同的状态下设置不同的图片,那最直观的办法就是提供两种背景色的图片,然后直接在Storyboard上通过设置不同状态下Image属性的值来达到目的。
但是这种方案最不好的地方就在于需要提供很多仅仅是颜色不同的图片,如果以后背景色改成其他色系怎么办?设置以后提供换肤功能,每一种皮肤都要提供一整套这些背景***片吗?
第二种方案
我们还知道按钮的BackgroundImage也是可以根据不同状态来设置不同的背景图片的,那方案就来了,让程序根据颜色自动生成不同的纯色背景图片即可。
为了保证可复用性,定义一个UIButton的Category,实现如下:
@implementation UIButton (FillColor)
- (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state {
[self setBackgroundImage:[UIButton imageWithColor:backgroundColor] forState:state];
}
+ (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
上述代码应该还是很直观的,调用的办法如下:
[self.button setBackgroundColor:GetColorFromHex(0xffff9000) forState:UIControlStateNormal];
[self.button setBackgroundColor:GetColorFromHex(0xffff6c00) forState:UIControlStateHighlighted];
其中GetColorFromHex是我自己定义的一个宏:
#define GetColorFromHex(hexColor) \
[UIColor colorWithRed:((hexColor >> 16) & 0xFF) / 255.0 \
green:((hexColor >> 8) & 0xFF) / 255.0 \
blue:((hexColor >> 0) & 0xFF) / 255.0 \
alpha:((hexColor >> 24) & 0xFF) / 255.0]
其实上述宏代码写成Category会更好,以后再做修改了。
比如上图左边是按钮没有被按下时的背景色,右边是按钮被按下时的背景色。
第一种方案
我们知道按钮的Image属性可以在不同的状态下设置不同的图片,那最直观的办法就是提供两种背景色的图片,然后直接在Storyboard上通过设置不同状态下Image属性的值来达到目的。
但是这种方案最不好的地方就在于需要提供很多仅仅是颜色不同的图片,如果以后背景色改成其他色系怎么办?设置以后提供换肤功能,每一种皮肤都要提供一整套这些背景***片吗?
第二种方案
我们还知道按钮的BackgroundImage也是可以根据不同状态来设置不同的背景图片的,那方案就来了,让程序根据颜色自动生成不同的纯色背景图片即可。
为了保证可复用性,定义一个UIButton的Category,实现如下:
@implementation UIButton (FillColor)
- (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state {
[self setBackgroundImage:[UIButton imageWithColor:backgroundColor] forState:state];
}
+ (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
上述代码应该还是很直观的,调用的办法如下:
[self.button setBackgroundColor:GetColorFromHex(0xffff9000) forState:UIControlStateNormal];
[self.button setBackgroundColor:GetColorFromHex(0xffff6c00) forState:UIControlStateHighlighted];
其中GetColorFromHex是我自己定义的一个宏:
#define GetColorFromHex(hexColor) \
[UIColor colorWithRed:((hexColor >> 16) & 0xFF) / 255.0 \
green:((hexColor >> 8) & 0xFF) / 255.0 \
blue:((hexColor >> 0) & 0xFF) / 255.0 \
alpha:((hexColor >> 24) & 0xFF) / 255.0]
其实上述宏代码写成Category会更好,以后再做修改了。
相关文章推荐
- iOS 需要注意的地方
- 会议纪要二:自主去优化你的代码,优化你的逻辑
- 寻找百度图片搜索接口历程--one
- navigationBar设置透明度
- 增量数组查找
- 设置加载失败,正在加载,界面。
- Amazon 亚马逊增加 Gamecircle注意事项
- 常见排序算法的Java实现代码汇总
- JAVA NIO non-blocking模式实现高并发服务器(转)
- Hibernate插入、查询、删除操作 HQL
- 设计模式之单例模式
- ppython None Null区别
- C++ Primer Plus学习:第十五章
- C++ Primer Plus学习:第十四章
- p235习题2
- HDU 2822 多校联赛1
- FPGA图像处理——初次接触FPGA
- Angular2 进阶
- 不可变对象和类,变量的作用域
- C++ Primer Plus学习:第十三章