mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-19 12:49:02 +00:00
Fix camera zoom
This commit is contained in:
parent
53d81aef4c
commit
367836362a
@ -482,16 +482,16 @@ const NSInteger PGCameraFrameRate = 30;
|
|||||||
if (backingLevel < firstMark) {
|
if (backingLevel < firstMark) {
|
||||||
realLevel = 0.5 + 0.5 * (backingLevel - 1.0) / (firstMark - 1.0);
|
realLevel = 0.5 + 0.5 * (backingLevel - 1.0) / (firstMark - 1.0);
|
||||||
} else if (backingLevel < secondMark) {
|
} else if (backingLevel < secondMark) {
|
||||||
realLevel = 1.0 + (backingLevel - firstMark) / (secondMark - firstMark);
|
realLevel = 1.0 + 1.0 * (backingLevel - firstMark) / (secondMark - firstMark);
|
||||||
} else {
|
} else {
|
||||||
realLevel = 2.0 + (backingLevel - secondMark) / (self.maxZoomLevel - secondMark);
|
realLevel = 2.0 + 6.0 * (backingLevel - secondMark) / (self.maxZoomLevel - secondMark);
|
||||||
}
|
}
|
||||||
} else if (marks.count == 1) {
|
} else if (marks.count == 1) {
|
||||||
CGFloat mark = [marks.firstObject floatValue];
|
CGFloat mark = [marks.firstObject floatValue];
|
||||||
if (backingLevel < mark) {
|
if (backingLevel < mark) {
|
||||||
realLevel = 1.0 + backingLevel / mark;
|
realLevel = 1.0 + 1.0 * (backingLevel - 1.0) / (mark - 1.0);
|
||||||
} else {
|
} else {
|
||||||
realLevel = 2.0 + (backingLevel - mark) / (self.maxZoomLevel - mark);
|
realLevel = 2.0 + 6.0 * (backingLevel - mark) / (self.maxZoomLevel - mark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,7 +511,7 @@ const NSInteger PGCameraFrameRate = 30;
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (CGFloat)maxZoomLevel {
|
- (CGFloat)maxZoomLevel {
|
||||||
return MIN(6.0f, self.videoDevice.activeFormat.videoMaxZoomFactor);
|
return MIN(16.0f, self.videoDevice.activeFormat.videoMaxZoomFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)resetZoom {
|
- (void)resetZoom {
|
||||||
@ -531,38 +531,30 @@ const NSInteger PGCameraFrameRate = 30;
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CGFloat level = zoomLevel;
|
CGFloat level = zoomLevel;
|
||||||
|
CGFloat backingLevel = 1.0;
|
||||||
if (iosMajorVersion() >= 13.0 && device.isVirtualDevice) {
|
if (iosMajorVersion() >= 13.0 && device.isVirtualDevice) {
|
||||||
NSArray *marks = device.virtualDeviceSwitchOverVideoZoomFactors;
|
NSArray *marks = device.virtualDeviceSwitchOverVideoZoomFactors;
|
||||||
if (marks.count == 2) {
|
if (marks.count == 2) {
|
||||||
CGFloat firstMark = [marks.firstObject floatValue];
|
CGFloat firstMark = [marks.firstObject floatValue];
|
||||||
CGFloat secondMark = [marks.lastObject floatValue];
|
CGFloat secondMark = [marks.lastObject floatValue];
|
||||||
|
|
||||||
if (level < 1.0) {
|
if (level < 1.0) {
|
||||||
level = MAX(0.5, level);
|
level = MAX(0.5, level);
|
||||||
|
backingLevel = 1.0 + ((level - 0.5) / 0.5) * (firstMark - 1.0);
|
||||||
CGFloat backingLevel = 1.0 + ((level - 0.5) / 0.5) * (firstMark - 1.0);
|
|
||||||
device.videoZoomFactor = backingLevel;
|
|
||||||
} else if (zoomLevel < 2.0) {
|
} else if (zoomLevel < 2.0) {
|
||||||
CGFloat backingLevel = firstMark + (level - 1.0) * (secondMark - firstMark);
|
backingLevel = firstMark + ((level - 1.0) / 1.0) * (secondMark - firstMark);
|
||||||
device.videoZoomFactor = backingLevel;
|
|
||||||
} else {
|
} else {
|
||||||
CGFloat backingLevel = secondMark + (level - 2.0) * (self.maxZoomLevel - secondMark);
|
backingLevel = secondMark + ((level - 2.0) / 6.0) * (self.maxZoomLevel - secondMark);
|
||||||
device.videoZoomFactor = backingLevel;
|
|
||||||
}
|
}
|
||||||
} else if (marks.count == 1) {
|
} else if (marks.count == 1) {
|
||||||
CGFloat mark = [marks.firstObject floatValue];
|
CGFloat mark = [marks.firstObject floatValue];
|
||||||
if (zoomLevel < 2.0) {
|
if (zoomLevel < 2.0) {
|
||||||
CGFloat backingLevel = (level - 1.0) * mark;
|
backingLevel = 1.0 + ((level - 1.0) / 1.0) * (mark - 1.0);
|
||||||
device.videoZoomFactor = backingLevel;
|
|
||||||
} else {
|
} else {
|
||||||
CGFloat backingLevel = mark + (level - 2.0) * (self.maxZoomLevel - mark);
|
backingLevel = mark + ((level - 2.0) / 6.0) * (self.maxZoomLevel - mark);
|
||||||
device.videoZoomFactor = backingLevel;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
level = MAX(1.0, MIN(10.0, level));
|
|
||||||
device.videoZoomFactor = MAX([strongSelf minZoomLevel], MIN([strongSelf maxZoomLevel], level));
|
|
||||||
}
|
}
|
||||||
|
device.videoZoomFactor = MAX(1.0, MIN([strongSelf maxZoomLevel], backingLevel));
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2522,6 +2522,9 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
|
|||||||
case UIGestureRecognizerStateChanged:
|
case UIGestureRecognizerStateChanged:
|
||||||
{
|
{
|
||||||
CGFloat delta = (gestureRecognizer.scale - 1.0f) * 1.25;
|
CGFloat delta = (gestureRecognizer.scale - 1.0f) * 1.25;
|
||||||
|
if (_camera.zoomLevel > 2.0) {
|
||||||
|
delta *= 2.0;
|
||||||
|
}
|
||||||
CGFloat value = MAX(_camera.minZoomLevel, MIN(_camera.maxZoomLevel, _camera.zoomLevel + delta));
|
CGFloat value = MAX(_camera.minZoomLevel, MIN(_camera.maxZoomLevel, _camera.zoomLevel + delta));
|
||||||
|
|
||||||
[_camera setZoomLevel:value];
|
[_camera setZoomLevel:value];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user