Reputation: 35
- (void)viewDidLoad {
[super viewDidLoad];
self.slider.maximumValue = 30;
}
- (void)slide:(UISlider *)slider {
NSLog(@"....progress slider value:%d", (int)slider.value);
CMTime showingTime = CMTimeMakeWithSeconds((int)slider.value, 1);
[self.player seekToTime:showingTime];
}
Everytime I slide the UISlider, The console log the right number as I slided. like 6 seconds. But the slider would jump back to 0; If I slide it to value bigger than 10, like 14, It would slide back to 10.
Can anybody help me ? Thanks
Upvotes: 2
Views: 1530
Reputation: 34421
Swift AVPlayer.seek(to:)
Swift version
When you skip toleranceBefore
and toleranceAfter
- .positiveInfinity
is used by default and it is extends limits in which system can return an optimized result
Be as you wish:
self.player.seek(
to: CMTimeMake(
value: Int64(playbackSlider.value * 1000),
timescale: 1000
)
)
Be at time:
self.player.seek(
to: CMTimeMake(
value: Int64(playbackSlider.value * 1000),
timescale: 1000
),
toleranceBefore: .zero,
toleranceAfter: .zero
)
[Swift AVAssetImageGenerator.copyCGImage(at:actualTime:)]
Upvotes: 0
Reputation: 1611
Try this.
You gotta init a CMTime object based on UISlider's value at first. Then you call AVPlayer object's seek to time method. Pass the CMTime object as parameter.
CMTime showingTime = CMTimeMake(slider.value *1000, 1000);
[self.player seekToTime:showingTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
Upvotes: 5