1. UIColor改变
sli.thumbTintColor = UIColor.whiteColor;
sli.thumbTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
2. 图片改变
/// 纯色转图片
/// @param color 颜色
/// @param size 图片尺寸
- (UIImage *)p_createImageWithColor:(UIColor *)color andSize:(CGSize)size {
CGRect rect = CGRectMake(0.0, 0.0, size.width, size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}
/// UIImage加圆角
/// @param image 图片
/// @param cornerRadius 圆角
- (UIImage *)p_generateCornerRadiusImage:(UIImage *)original cornerRadius:(CGFloat)cornerRadius {
UIGraphicsBeginImageContextWithOptions(original.size, NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect rect = CGRectMake(0.0, 0.0, original.size.width, original.size.height);
CGContextAddPath(ctx, [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius].CGPath);
CGContextClip(ctx);
[original drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
UISlider* sli = (UISlider *)sub;
UIImage* img = [UIImage imageNamed:@"white_100"];
// 图片截取
CGImageRef cgImage = CGImageCreateWithImageInRect(img.CGImage,CGRectMake(0, 0, 24, 24));
img = [UIImage imageWithCGImage:cgImage];
UIImage * resImg = [self p_generateCornerRadiusImage:img cornerRadius:12];
[sli setThumbImage:resImg forState:UIControlStateNormal];
3. 改变UISlider的外观
slider.minimumValueImage = [UIImage imageNamed:@"设置slider左边的图片"];
slider.maximumValueImage = [UIImage imageNamed:@"设置slider右边的图片"];
//设置了会减小滚动区域的宽度,但整个slider的宽度不变
[slider setMinimumTrackImage:[UIImage imageNamed:@"设置滑轮左边的图片,最好宽度和slider一样"] forState:UIControlStateNormal];
[slider currentMinimumTrackImage]; //得到当前滑轮左边的图片如果有的话
[slider setMaximumTrackImage:[UIImage imageNamed:@"设置滑轮左边的图片,最好宽度和slider一样"] forState:UIControlStateNormal];
[slider currentMaximumTrackImage]; //得到当前滑轮右边的图片如果有的话
把蓝色的设置为MinimumTrackImage
把灰色的设置为MaximumTrackImage
可以加一个label用于显示value,在UISlider的行为的change方法里改变label.text属性
slider.minimumTrackTintColor = [UIColor redColor]; //滑轮左边颜色如果设置了左边的图片就不会显示
slider.maximumTrackTintColor = [UIColor redColor]; //滑轮右边颜色如果设置了右边的图片就不会显示
[slider thumbImageForState:UIControlStateNormal];
[slider setThumbImage:[UIImage imageNamed:@"设置滑轮样子的图片"] forState:UIControlStateHighlighted];//设置了普通状态和高亮状态的滑轮样式
slider.thumbTintColor = [UIColor redColor];//设置了滑轮的颜色如果设置了滑轮的样式图片就不会显示
你可以根据滑块的各种不同状态显示不同的图像。下面是可用状态:
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateDisabled
UIControlStateSelected
4. iOS 图片资源放在 Images.xcassets 和单独文件夹的区别,通过 imageNamed 和imageWithContentsOfFile 加载的区别
一、iOS 图片资源放在 Images.xcassets 和单独文件夹的区别
Images.xcassets(直接拖动到assets目录即可)
(1)图片的资源包放到 Images.xcassets 中,会把所有的文件打包 Assets.car文件,图片会被压缩,从而使包的体积变小。
(2)只支持png格式的图片
(3)图片只支持 [UIImage imageNamed:@“logo01”] 的方式实例化
imageView.image = [UIImage imageNamed:@“logo01”];
单独文件夹
(1)图片的资源包放到文件夹中,会被打包 MainBundle 中。图片不会被压缩。
(2)可以使用 [UIImage imageNamed:@“logo01”] 加载,也可以使用i mageWithContentOfFile: 方法加载。
// imageView.image = [UIImage imageNamed:@“logo01”];
NSString *path = [[NSBundle mainBundle] pathForResource:@“logo01.png” ofType:nil];
imageView.image = [UIImage imageWithContentsOfFile:path];
二、通过 imageNamed 和imageWithContentsOfFile 加载图片的区别
imageNamed
(1)加载到内存当中会一直存在内存当中,(图片)不会随着对象的销毁而销毁。
(2)相同的图片是不会重复加载内存中
(3)加载到内存中占据的内存较大
imageWithContentsOfFile
(1)加载的图片会随着对象的销毁而销毁
(2)相同的图片是会重复加载到内存中
(3)加载到内存中占据的内存较大
三、总结
放在 Images.xcassets 里边的图片打包时,会被压缩成.car文件,APP的体积变小。但是不能通过路径方式加载图片,只能使用 [UIIimage imageName:]
而imageName:这个方法加载图片,会在内存中一直存在,什么时候销毁不受管理员控制,因此适用于加载频繁的小图片
而放在文件夹的图片,可以使用imageWithContentOfFile:方法加载,该方法的好处是内存随着对象的销毁而销毁,因此适用于大图片、频率低的图片
引用
- https://www.jianshu.com/p/4fdcd758e3dc
- http://www.manongjc.com/article/68443.html
- https://www.cnblogs.com/tufei7/p/15944842.html
- http://t.zoukankan.com/yulang314-p-3550359.html