Я записал видео с помощью AVCapture библиотеки AVFoundation и сохранил в папке с документами.Я могу воспроизводить записанное видео с помощью AVPlayer в моем приложении.Сейчас я пытаюсь реализовать Pinch Zoom.Так что это будет работать так же, как фото приложение работает.Я не хочу использовать scrollview, потому что я хочу записать ZOOMABLE видео.
Для решения этой проблемы у меня есть ВИД.В этом виде я использую AVPlayer.Поэтому, вероятно, мне нужно будет добавить UIPinchGestureRecognizer в представление , после чего я увеличу масштаб для просмотра, а также я изменю значение AVCaptureDevice videoZoomFactor .Я пытался, но иногда мой вид больше зума, а записанное видео имеет меньше зума.Я хочу сделать это так же, как приложение для фотоаппарата.
-(void) handlePinchToZoomRecognizer:(UIPinchGestureRecognizer*)gestureRecognizer {
// NSLog(@"handlePinchToZoomRecognizer called");
if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
// Reset the last scale, necessary if there are multiple objects with different scales
lastScale = [gestureRecognizer scale];
}
/* if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
[gestureRecognizer state] == UIGestureRecognizerStateChanged) {*/
if ([gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];
// Constants to adjust the max/min values of zoom
const CGFloat kMaxScale = 2.0;
const CGFloat kMinScale = 1.0;
//CGFloat newScale = 1 – (lastScale – [gestureRecognizer scale]); // new scale is in the range (0-1)
CGFloat newScale = 1 - (lastScale - [gestureRecognizer scale] );
newScale = MIN(newScale, kMaxScale / currentScale);
newScale = MAX(newScale, kMinScale / currentScale);
CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale);
[gestureRecognizer view].transform = transform;
lastScale = [gestureRecognizer scale]; // Store the previous scale factor for the next pinch gesture call
NSLog(@"handlePinchToZoomRecognizer %f", lastScale);
if(lastScale > 0) {
if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
NSError *error = nil;
if ([self.videoInputDevice lockForConfiguration:&error]) {
// CGFloat desiredZoomFactor = self.videoInputDevice.videoZoomFactor + atan2f(gestureRecognizer.velocity, pinchVelocityDividerFactor);
// Check if desiredZoomFactor fits required range from 1.0 to activeFormat.videoMaxZoomFactor
/* self.videoInputDevice.videoZoomFactor = MAX(1.0, MIN(desiredZoomFactor, self.videoInputDevice.activeFormat.videoMaxZoomFactor));*/
self.videoInputDevice.videoZoomFactor = lastScale;
[self.videoInputDevice unlockForConfiguration];
} else {
NSLog(@"handlePinchToZoomRecognizer error: %@", error);
}
}
}
}
}