美文网首页
IOS UISlider划不动问题解决

IOS UISlider划不动问题解决

作者: 可乐小子 | 来源:发表于2023-05-17 13:29 被阅读0次

创建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

相关文章

网友评论

      本文标题:IOS UISlider划不动问题解决

      本文链接:https://www.haomeiwen.com/subject/eosisdtx.html