Ios 如何在自定义UISlider中添加缓冲条?

Ios 如何在自定义UISlider中添加缓冲条?,ios,objective-c,video-streaming,progress-bar,uislider,Ios,Objective C,Video Streaming,Progress Bar,Uislider,我已经完成了我的整个视频播放器的工作条件,但仍然不能做缓冲。我在尝试这种方法,但它不起作用。由于代码错误,我甚至在第一步就失败了。这是我的滑块代码 -(void) playMethod { NSURL *url = [[NSURL alloc] initWithString:urlStr.text]; movie = [[MPMoviePlayerController alloc]initWithContentURL:url]; [movie setMovieSourceType:MPMovie

我已经完成了我的整个视频播放器的工作条件,但仍然不能做缓冲。我在尝试这种方法,但它不起作用。由于代码错误,我甚至在第一步就失败了。这是我的滑块代码

-(void) playMethod {
NSURL *url = [[NSURL alloc] initWithString:urlStr.text];
movie = [[MPMoviePlayerController alloc]initWithContentURL:url];
[movie setMovieSourceType:MPMovieSourceTypeFile];
[movie.view setFrame:self.view.frame];
[movie prepareToPlay];
movie.controlStyle = MPMovieControlStyleNone;
movie.fullscreen = YES;
movie.shouldAutoplay = YES;
[movie setScalingMode:MPMovieScalingModeAspectFill];
//[movie setCurrentPlaybackRate:2.f];
[self.movie setFullscreen:YES animated:NO];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(MPMoviePlayerLoadStateDidChange:)
                                             name:MPMoviePlayerLoadStateDidChangeNotification
                                           object:nil];
[self.view addSubview:movie.view];

progressbar=[[UISlider alloc]init];
[progressbar setFrame:CGRectMake(75,self.view.frame.size.height - 35 + 2, self.view.frame.size.width - 75 - 105 - 10, 20)];
[progressbar setMinimumTrackImage:[UIImage imageNamed:@"RedLine1.png"] forState:UIControlStateNormal];
[progressbar setMaximumTrackImage:[UIImage imageNamed:@"GrayLine1.png"] forState:UIControlStateNormal];
[progressbar setThumbImage:[UIImage imageNamed:@"Thumb.png"] forState:UIControlStateNormal];
[progressbar addTarget:self action:@selector(sliderforprogressbar:) forControlEvents:UIControlEventTouchUpInside];
[playerView addSubview:progressbar];
}

- (IBAction)sliderforprogressbar:(id)sender
{
movie.currentPlaybackTime = progressbar.value * movie.duration;
}

- (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification
{
if ((movie.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK)
{
    int seconds = (int)movie.duration;
    int remainder = seconds % 3600;
    int hours = seconds / 3600;
    int minutes = remainder / 60;
    int forSeconds = remainder % 60;
    timeDisplay.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours,minutes,forSeconds];
}
}

如果有人感兴趣,我可以向您展示更多的代码,但只需关注progressbar就可以了。你知道我如何在这里进行缓冲吗?

好的,我已经用全新的方式完成了,IDK如果有人有更好的想法,请分享

UIImageView *progressbarBG = [[UIImageView alloc]initWithFrame:CGRectMake(75+5,self.view.frame.size.height - 35 + 5, self.view.frame.size.width - 75 - 105 - 10  - 10, 20 - 5)];
progressbarBG.image = [UIImage imageNamed:@"GrayLine1.png"];
[playerView addSubview:progressbarBG];

//progressbarBuffering = [[UIImageView alloc]initWithFrame:CGRectMake(80,self.view.frame.size.height - 30, self.view.frame.size.width - 200, 15)];
progressbarBuffering = [[UIImageView alloc]init];
progressbarBuffering.image = [UIImage imageNamed:@"LightRedLine.png"];
[playerView addSubview:progressbarBuffering];


progressbar=[[UISlider alloc]init];
[progressbar setFrame:CGRectMake(75,self.view.frame.size.height - 35 + 2, self.view.frame.size.width - 75 - 105 - 10, 20)];
[progressbar setMinimumTrackImage:[UIImage imageNamed:@"RedLine1.png"] forState:UIControlStateNormal];
//[progressbar setMaximumTrackImage:[UIImage imageNamed:@"GrayLine1.png"] forState:UIControlStateNormal];
[progressbar setMaximumTrackImage:[UIImage imageNamed:@"BlankBar.png"] forState:UIControlStateNormal];
[progressbar setThumbImage:[UIImage imageNamed:@"Thumb.png"] forState:UIControlStateNormal];
[progressbar addTarget:self action:@selector(sliderforprogressbar:) forControlEvents:UIControlEventTouchUpInside];
[playerView addSubview:progressbar];

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updatePlaybackTime:) userInfo:nil repeats:YES];



- (void)updatePlaybackTime:(NSTimer*)theTimer {
progressbarBuffering.frame = CGRectMake(80,self.view.frame.size.height - 30, (self.view.frame.size.width - 200)*(movie.playableDuration/movie.duration), 15); 
}

我创建了两个背景图像视图,一个是灰色背景图像,一个是浅红色图像,并在Progressbar的MaximumTrackImage中添加了空白png图像。然后,我只是根据代码中提到的可播放持续时间调整浅红色图像的大小。

好的,我用全新的方式完成了这项工作,IDK如果有人有更好的想法,请分享

UIImageView *progressbarBG = [[UIImageView alloc]initWithFrame:CGRectMake(75+5,self.view.frame.size.height - 35 + 5, self.view.frame.size.width - 75 - 105 - 10  - 10, 20 - 5)];
progressbarBG.image = [UIImage imageNamed:@"GrayLine1.png"];
[playerView addSubview:progressbarBG];

//progressbarBuffering = [[UIImageView alloc]initWithFrame:CGRectMake(80,self.view.frame.size.height - 30, self.view.frame.size.width - 200, 15)];
progressbarBuffering = [[UIImageView alloc]init];
progressbarBuffering.image = [UIImage imageNamed:@"LightRedLine.png"];
[playerView addSubview:progressbarBuffering];


progressbar=[[UISlider alloc]init];
[progressbar setFrame:CGRectMake(75,self.view.frame.size.height - 35 + 2, self.view.frame.size.width - 75 - 105 - 10, 20)];
[progressbar setMinimumTrackImage:[UIImage imageNamed:@"RedLine1.png"] forState:UIControlStateNormal];
//[progressbar setMaximumTrackImage:[UIImage imageNamed:@"GrayLine1.png"] forState:UIControlStateNormal];
[progressbar setMaximumTrackImage:[UIImage imageNamed:@"BlankBar.png"] forState:UIControlStateNormal];
[progressbar setThumbImage:[UIImage imageNamed:@"Thumb.png"] forState:UIControlStateNormal];
[progressbar addTarget:self action:@selector(sliderforprogressbar:) forControlEvents:UIControlEventTouchUpInside];
[playerView addSubview:progressbar];

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updatePlaybackTime:) userInfo:nil repeats:YES];



- (void)updatePlaybackTime:(NSTimer*)theTimer {
progressbarBuffering.frame = CGRectMake(80,self.view.frame.size.height - 30, (self.view.frame.size.width - 200)*(movie.playableDuration/movie.duration), 15); 
}

我创建了两个背景图像视图,一个是灰色背景图像,一个是浅红色图像,并在Progressbar的MaximumTrackImage中添加了空白png图像。然后我只是根据代码中提到的可播放持续时间调整浅红色图像的大小。

意味着你看不到缓冲(视频正在缓冲)…状态?你能更具体地解释一下问题的前两行吗?@ArpitParekh我实际上是在创建自定义播放器。。。JU希望添加缓冲。我尝试了不同的方法,如上面提到的,但都做不到。。。因为我无法在UISlider中显示其他酒吧。。。一个栏显示最大图像,一个栏显示当前播放时间。。。现在,我如何为PlayableDuration(缓冲)添加另一个条,以便您可以管理两个条。或者您在缓冲编码方面有问题?@ArpitParekh我可以添加两条吗?在乌斯利德。。。我可以做缓冲我只是不知道如何显示在滑块。。。。就像我给滑块的值:playableduration/duration。。。这会给我缓冲时间。。。但是,如果我显示缓冲,我将如何显示当前时间MPMoviePlayer是否有任何功能来显示默认栏,它会在需要时自动显示缓冲栏?意味着你看不到缓冲(视频正在缓冲)…状态?你能更具体地解释一下问题的前两行吗?@ArpitParekh我实际上是在创建自定义播放器。。。JU希望添加缓冲。我尝试了不同的方法,如上面提到的,但都做不到。。。因为我无法在UISlider中显示其他酒吧。。。一个栏显示最大图像,一个栏显示当前播放时间。。。现在,我如何为PlayableDuration(缓冲)添加另一个条,以便您可以管理两个条。或者您在缓冲编码方面有问题?@ArpitParekh我可以添加两条吗?在乌斯利德。。。我可以做缓冲我只是不知道如何显示在滑块。。。。就像我给滑块的值:playableduration/duration。。。这会给我缓冲时间。。。但是,如果我显示缓冲区,我将如何显示当前时间MPMoviePlayer是否有任何功能来显示默认条,它会在需要时自动显示缓冲条?