导航条UIBarButtonItem添加图片,如何避免渲染
2016-01-12 17:35
495 查看
今天在学swift的时候发现的这个方法(表脸啊,明明是一起学swift的小伙伴先发现的啊),只需要一句代码(看看下面的这些代码,真是又忧伤又喜悦)
大意是用指定的渲染模式创建image对象。默认情况下,图像的渲染模式uiimagerenderingmodeautomatic,我们需要的是UIImageRenderingModeAlwaysOriginal
讲真,我会一辈子记住这句代码...
====================================================================================================================================
今天做项目时碰到的需求:
导航条的leftBarButtonItem需要做一个未读提醒,效果如图所示:
贴心的UI妹子也给切图了,有未读一套图,读完另外一套。
熟悉导航条的都知道,导航条有个tintColor属性,当你不设置时恒为蓝色
,而设置了就恒为你设置的颜色(例:白色)
,然后搞了半天,我就有些崩溃,以我的水平真的是没找到利用导航条属性来倔强的用UI妹子图的方法。
在下输了,于是发挥了中国人迂回解决问题的方法,舍弃UI妹子,单独创建一个Button来显示未读小红点,代码如下:
设置导航条时直接:
当有未读消息时:
今天又找到一个方法:
在放图片的button下方放一个透明的button,代码如下:
当有未读消息时:
没有时:
原因是导航条与放置图片的button中间隔了一层button,导航条tintColor渲染不到了,大概吧,原因找到了再贴。
至此,小马述一家之言。
UIImage *image = [[UIImage imageNamed:@"lt_ic_my"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [btn setImage:image forState:UIControlStateNormal] ;关键在imageWithRenderingMode这个方法,看Apple注释
// Create a version of this image with the specified rendering mode. By default, images have a rendering mode of UIImageRenderingModeAutomatic. - (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingMode NS_AVAILABLE_IOS(7_0);
大意是用指定的渲染模式创建image对象。默认情况下,图像的渲染模式uiimagerenderingmodeautomatic,我们需要的是UIImageRenderingModeAlwaysOriginal
讲真,我会一辈子记住这句代码...
====================================================================================================================================
今天做项目时碰到的需求:
导航条的leftBarButtonItem需要做一个未读提醒,效果如图所示:
贴心的UI妹子也给切图了,有未读一套图,读完另外一套。
熟悉导航条的都知道,导航条有个tintColor属性,当你不设置时恒为蓝色
,而设置了就恒为你设置的颜色(例:白色)
,然后搞了半天,我就有些崩溃,以我的水平真的是没找到利用导航条属性来倔强的用UI妹子图的方法。
在下输了,于是发挥了中国人迂回解决问题的方法,舍弃UI妹子,单独创建一个Button来显示未读小红点,代码如下:
- (UIView *)myView { if (!_myView) { _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setAdjustsImageWhenHighlighted:NO]; [btn addTarget:self action:@selector(enterPersonInfoPage) forControlEvents:UIControlEventTouchUpInside]; [_myView addSubview:btn]; [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0)); }]; [btn setImage:[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal]; UIButton *unreadBtn = [UIButton buttonWithType:UIButtonTypeCustom]; self.unreadBtn = unreadBtn; [_myView addSubview:unreadBtn]; [unreadBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_myView).offset(3); make.right.equalTo(_myView).insets(UIEdgeInsetsZero); make.height.equalTo(8); make.width.equalTo(8); }]; } return _myView; }
设置导航条时直接:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.myView];
当有未读消息时:
[self.unreadBtn setImage:[UIImage imageNamed:@"unread"] forState:UIControlStateNormal];没有时:
[self.unreadBtn setImage:nil forState:UIControlStateNormal];
今天又找到一个方法:
在放图片的button下方放一个透明的button,代码如下:
- (UIView *)myView { if (!_myView) { _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)]; UIButton *clearBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [clearBtn setAdjustsImageWhenHighlighted:NO]; [_myView addSubview:clearBtn]; [clearBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0)); }]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setAdjustsImageWhenHighlighted:NO]; [btn addTarget:self action:@selector(enterPersonInfoPage) forControlEvents:UIControlEventTouchUpInside]; [_myView addSubview:btn]; [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0)); }]; [btn setImage:[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal]; self.myBtn = btn; } return _myView; }
当有未读消息时:
[self.myBtn setImage:[UIImage imageNamed:@"lt_ic_my_unread"] forState:UIControlStateNormal];
没有时:
[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal];
原因是导航条与放置图片的button中间隔了一层button,导航条tintColor渲染不到了,大概吧,原因找到了再贴。
至此,小马述一家之言。
相关文章推荐
- UIAlertController 的使用(NS_CLASS_AVAILABLE_IOS(8_0)iOS8以后有效)
- UIview转换UIimage
- EasyUI datagrid动态加载json数据
- IOS上 关于状态栏的相关设置(UIStatusBar)
- Java集合的Stack、Queue、Map的遍历
- 自定义UINavigationItem的两种方法以及相应的隐藏方法
- HDU 1005 Number Sequence
- DIY:利用Arduino制作智能家居系统
- EasyUI Sping MVC 树形网格 Treegrid 简单实例
- vs2012 build boost
- JUI编辑器的使用
- Arduino入门教程--连载
- UIView的动画
- UITableViewCell选中无色
- iOS开发中UISlider的简单使用
- United UI
- Fuel 管理节点
- iOS分享【OC】—— UITableView 的 cell 自适应
- (绝对有用)iOS获取UUID,并使用keychain存储
- 如何让Arduino用2颗5号电池运行1年以上--Arduino低功耗