自定义UISlider的样式和滑块

又做完一个项目,遂到了写帖时间了,要跟大家分享的是:自定义UISlider的图片和滑块,先看一下效果:


然后是实现了,我们使用的是UISlider的setMinimumTrackImage,和setMaximumTrackImage方法来定义图片 的,这两个方法可以设置滑块左边和右边的图片的,不过如果用的是同一张图片且宽度和控件宽度基本一致,就不会有变形拉伸的后果,先看代码,写在 viewDidLoad中:


 //左右轨的图片
UIImage *stetchLeftTrack= [UIImage imageNamed:@"brightness_bar.png"];
UIImage *stetchRightTrack = [UIImage imageNamed:@"brightness_bar.png"];
//滑块图片
UIImage *thumbImage = [UIImage imageNamed:@"mark.png"];

UISlider *sliderA=[[UISlider alloc]initWithFrame:CGRectMake(30, 320, 257, 7)];
sliderA.backgroundColor = [UIColor clearColor];
sliderA.value=1.0;
sliderA.minimumValue=0.7;
sliderA.maximumValue=1.0;

[sliderA setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[sliderA setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
//注意这里要加UIControlStateHightlighted的状态,否则当拖动滑块时滑块将变成原生的控件
[sliderA setThumbImage:thumbImage forState:UIControlStateHighlighted];
[sliderA setThumbImage:thumbImage forState:UIControlStateNormal];
//滑块拖动时的事件
[sliderA addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
//滑动拖动后的事件
[sliderA addTarget:self action:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:sliderA];

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以通过使用 AVPlayer 和 AVPlayerLayer 类来实现视频监控进度条和视频回放页面时间轴自定义滑块。下面是一个示例代码片段,演示如何实现: 1.创建一个 AVPlayerLayer,将其添加到您的视图层次结构中,并将其绑定到 AVPlayer。 ``` // 创建 AVPlayer AVPlayer *player = [AVPlayer playerWithURL:[NSURL URLWithString:@"yourVideoURL"]]; [player play]; // 创建 AVPlayerLayer AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; ``` 2.创建一个 UISlider,并在滑动滑块时更新 AVPlayer 的当前时间。 ``` // 创建 UISlider UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(50, 400, 300, 20)]; [slider addTarget:self action:@selector(handleSlider:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:slider]; // 滑动滑块处理程序 - (void)handleSlider:(UISlider *)slider { CMTime videoDuration = player.currentItem.duration; double videoDurationSeconds = CMTimeGetSeconds(videoDuration); double newTime = videoDurationSeconds * slider.value; CMTime time = CMTimeMakeWithSeconds(newTime, player.currentTime.timescale); [player seekToTime:time]; } ``` 3.创建一个自定义滑块,并在拖动滑块时更新视频回放页面的时间轴。 ``` // 创建自定义滑块 UIImageView *thumbImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; thumbImageView.image = [UIImage imageNamed:@"yourImage"]; [slider setThumbImage:[UIImage new] forState:UIControlStateNormal]; [slider addSubview:thumbImageView]; // 拖动滑块处理程序 - (void)handlePan:(UIPanGestureRecognizer *)gesture { if (gesture.state == UIGestureRecognizerStateChanged) { CGPoint translation = [gesture translationInView:self.view]; CGPoint newCenter = CGPointMake(slider.thumbCenter.x + translation.x, slider.thumbCenter.y); if (newCenter.x > slider.frame.size.width) { newCenter.x = slider.frame.size.width; } else if (newCenter.x < 0) { newCenter.x = 0; } slider.thumbCenter = newCenter; CMTime videoDuration = player.currentItem.duration; double videoDurationSeconds = CMTimeGetSeconds(videoDuration); double newTime = videoDurationSeconds * (newCenter.x / slider.frame.size.width); CMTime time = CMTimeMakeWithSeconds(newTime, player.currentTime.timescale); [player seekToTime:time]; } } ``` 希望这可以帮助到您!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值