首先我们知道navigationBar的结构图NavigationBar 结构图,所以我们要做到这种效果,最终是要改变图片的alpha。基于此有如下3种方法。
1.设置渐变图片
根据上面设置为透明的方法,我们最直接能想到的还是setBackgroundImage,根据滑动距离去设置图片的alpha。
可以根据图片alpha和color封装一个图像类别如下:
+ (UIImage*)imageWithColor:(UIColor*)color{CGRectrect =CGRectMake(0.0f,0.0f,1.0f,1.0f);UIGraphicsBeginImageContext(rect.size);CGContextRefcontext =UIGraphicsGetCurrentContext();CGContextSetFillColorWithColor(context, [colorCGColor]);CGContextFillRect(context, rect);UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}
2.根据运行时的特性,动态绑定可以参考动态绑定demo可参考GitHub - ltebean/LTNavigationBar: UINavigationBar Category which allows you to change its appearance dynamically
3.直接获取NavigationBar子视图ImageView,然后设置他的透明度.然后用一个全局的imageView引用他。从结构图中可以看出来,他是NavigationBar的子视图,我们可以通过for...in循环遍历navigationBar.subviews,然后获得这个view.或者直接直接获取UIImage = self.navigationController.navigationBar.subviews.firstObject;
第一次写博文,若有不妥之处,望赐教!