iOS开发 UISlider设置滑块形状以及 view转化成im
2021-11-02 本文已影响0人
我是卖报的小行家
今天需求是做一个播放器界面,如下图
播放器界面
播放进度条呢,一般有两种方式
- ProgressView
- UISlider
最开始需求是进度条不让拖动,本着后期需求的一个更改性,最终选择了使用UISlider来实现播放进度条。
好久没用到过UISlider了,需要注意的地方有设置UISlider的高度可不只是看到的那一丢丢高度,就因为高度设置的不对,会走很多弯路。
UISlider的高度不小于你定义滑块样式的高度,如下代码
self.slider = [[UISlider alloc]init];
self.slider.minimumTrackTintColor = [UIColor whiteColor];
self.slider.maximumTrackTintColor = kColorRGBA(0xFFFFFF, 0.1);
[self.view addSubview:self.slider];
[self.slider makeConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(scaleFactorForWidth(10));
make.width.equalTo(kScreen_width - scaleFactorForWidth(78));
make.centerX.equalTo(self.contentImageView);
make.top.equalTo(self.typeLabel.mas_bottom).offset(scaleFactorForWidth(35));
}];
self.slider.layer.cornerRadius = 2;
self.slider.layer.masksToBounds = YES;
UIView * SliderImageView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 2, 10)];
SliderImageView.layer.cornerRadius = 1;
SliderImageView.layer.masksToBounds = YES;
SliderImageView.backgroundColor = [UIColor whiteColor];
[self.slider setThumbImage: [UIImage convertViewToImage:SliderImageView] forState:UIControlStateNormal];
[self.slider setThumbImage: [UIImage convertViewToImage:SliderImageView] forState:UIControlStateHighlighted];
UI设计稿中UISlider轨道高度是4个像素,然后误以为整个UISlider高度就是4,这个时候就会出现因为高度不够导致滑块的样式是个错误的。
其中minimumTrackTintColor
为左边轨道的颜色可以理解为已播放部分的颜色,maximumTrackTintColor
为右边轨道的颜色可以理解为未播放部分的颜色 。SliderImageView
是一个view,一个滑块的view,convertViewToImage
是一个image的类拓展,将view转化成image
+ (UIImage *)convertViewToImage:(UIView *)view {
UIImage *image = [[UIImage alloc]init];
//UIGraphicsBeginImageContextWithOptions(区域大小, 是否是非透明的, 屏幕密度);
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, [UIScreen mainScreen].scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
后面内容想起来多少,或者使用过程中遇到什么问题了再进行补充!