创建RLKShapeSlider文件,继承自:UISlider,创建两个slider即可完成处理
import "RLKShapeSlider.h"
static const CGFloat kSliderBound = 20.0;
@interface RLKShapeSlider ()
@property (nonatomic) CGRect lastBounds;
@end
@implementation RLKShapeSlider
-
(CGRect)trackRectForBounds:(CGRect)bounds {
return CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width, MAX(bounds.size.height, 2.0));
} -
(CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value;
{rect.origin.x = rect.origin.x;
rect.size.width = rect.size.width;
CGRect result = [super thumbRectForBounds:bounds trackRect:rect value:value];
//记录下最终的frame
_lastBounds = result;
return result;
}
//检查是点击事件的点是否在slider范围内 -
(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
//调用父类判断
BOOL result = [super pointInside:point withEvent:event];if (!result) {
//如果不在slider范围内,扩充响应范围
if ((point.x >= (_lastBounds.origin.x - kSliderBound)) &&
(point.x <= (_lastBounds.origin.x + _lastBounds.size.width + kSliderBound)) &&
(point.y >= -kSliderBound) &&
(point.y < kSliderBound)) {
//在扩充范围内
return YES;
}
}//否则返回父类的结果
return result;
}
@end
引用的view
import <UIKit/UIKit.h>
import "RLKShapeSlider.h"
NS_ASSUME_NONNULL_BEGIN
@interface DXMeChargeProtectBotttomView : UIView
@property (nonatomic,strong) UISlider *slider;
@property (nonatomic,strong)RLKShapeSlider *slider2;
@property (nonatomic,assign) CGFloat percent;
@property (nonatomic,strong) UILabel *percentLabel;
@end
//
// DXMeChargeProtectHeaderView.m
// WSProject
//
// Created by macmini on 2023/5/6.
// Copyright © 2023 姚强红. All rights reserved.
//
import "DXMeChargeProtectBotttomView.h"
@implementation DXMeChargeProtectBotttomView
-
(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if(self) {
UIView *bgWhiteView = [[UIView alloc] initWithFrame:(CGRectMake(15, 15, SCREEN_WIDTH -2 * 15, 102))];
self.ws_h(110 + 15);
bgWhiteView.backgroundColor = [UIColor whiteColor];
[self addSubview:bgWhiteView];
bgWhiteView.layer.cornerRadius = 5.0f;
bgWhiteView.layer.masksToBounds = YES;UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.text = @"自动停止电池电量上限"; titleLabel.font = [UIFont boldSystemFontOfSize:16]; [bgWhiteView addSubview:titleLabel]; [titleLabel sizeToFit]; [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(bgWhiteView.mas_left).offset(15); make.top.equalTo(bgWhiteView.mas_top).offset(15); }]; UILabel *descLabel = [[UILabel alloc] init]; descLabel.text = @"可能存在部分场站无法支持设置SOC上线情况"; descLabel.font = [UIFont systemFontOfSize:12]; descLabel.textColor = HEXCOLOR(@"#999999"); [bgWhiteView addSubview:descLabel]; [descLabel sizeToFit]; [descLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(bgWhiteView.mas_left).offset(15); make.top.equalTo(titleLabel.mas_bottom).offset(8); }]; UILabel *percentLabel = [[UILabel alloc] init]; percentLabel.text = @"60%"; percentLabel.font = [UIFont systemFontOfSize:16]; percentLabel.textColor = HEXCOLOR(@"#00A796"); [bgWhiteView addSubview:percentLabel]; [percentLabel sizeToFit]; [percentLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(bgWhiteView.mas_right).offset(-15); make.centerY.equalTo(titleLabel.mas_centerY); }]; self.percentLabel = percentLabel; UILabel *leftLabel = [[UILabel alloc] init]; leftLabel.text = @"60%"; leftLabel.font = [UIFont systemFontOfSize:12]; leftLabel.textColor = HEXCOLOR(@"#999999"); [bgWhiteView addSubview:leftLabel]; [leftLabel sizeToFit]; [leftLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(bgWhiteView.mas_left).offset(15); make.top.equalTo(descLabel.mas_bottom).offset(15); make.width.equalTo(@(CGRectGetWidth(leftLabel.frame))); make.height.equalTo(@(CGRectGetHeight(leftLabel.frame))); }]; UILabel *rightLabel = [[UILabel alloc] init]; rightLabel.text = @"100%"; rightLabel.font = [UIFont systemFontOfSize:12]; rightLabel.textColor = HEXCOLOR(@"#999999"); [bgWhiteView addSubview:rightLabel]; [rightLabel sizeToFit]; [rightLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(bgWhiteView.mas_right).offset(-15); make.top.equalTo(descLabel.mas_bottom).offset(15); }]; //slider self.slider = [[UISlider alloc] init]; [bgWhiteView addSubview:self.slider]; [self.slider mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(rightLabel.mas_left).offset(-11); make.centerY.equalTo(leftLabel.mas_centerY); make.left.equalTo(leftLabel.mas_right).offset(11); make.height.equalTo(@(4)); }]; self.slider.minimumValue = 0.6; self.slider.maximumValue = 1.0; self.slider.minimumTrackTintColor = HEXCOLOR(@"#00A796"); self.slider.maximumTrackTintColor = HEXCOLOR(@"#F7F7F7"); [self.slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:(UIControlEventValueChanged)]; self.slider2 = [[RLKShapeSlider alloc] init]; [bgWhiteView addSubview:self.slider2]; [self.slider2 mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(rightLabel.mas_left).offset(-11); make.centerY.equalTo(leftLabel.mas_centerY); make.left.equalTo(leftLabel.mas_right).offset(11); make.height.equalTo(@(4)); }]; self.slider2.minimumValue = 0.6; self.slider2.maximumValue = 1.0; self.slider2.minimumTrackTintColor = [UIColor clearColor]; self.slider2.maximumTrackTintColor = [UIColor clearColor]; [self.slider2 addTarget:self action:@selector(sliderValueChanged:) forControlEvents:(UIControlEventValueChanged)];
// //移除slider的圆球
CGSize s=CGSizeMake(1, 1);
UIGraphicsBeginImageContextWithOptions(s, 0, [UIScreen mainScreen].scale);
UIRectFill(CGRectMake(0, 0, 1, 1));
UIImage *img=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.slider setThumbImage:img forState:UIControlStateNormal];
}
return self;
}
- (void)setPercent:(CGFloat)percent {
self.slider.value = percent;
self.percentLabel.text = [NSString stringWithFormat:@"%.0f%@",percent * 100,@"%"];
self.slider2.value = percent;
}
- (void) sliderValueChanged:(id)sender{
UISlider* control = (UISlider)sender;
// if(control == self.slider){
float value = control.value;
self.percent = value;
self.percentLabel.text = [NSString stringWithFormat:@"%.0f%@",value * 100,@"%"];
/ 添加自己的处理代码 */
// }
}
@end
网友评论