Various Fixes

This commit is contained in:
Ilya Laktyushin 2021-07-27 15:49:46 +03:00
parent 161cad3f0a
commit 7d3cf6031e
6 changed files with 84 additions and 36 deletions

View File

@ -2,6 +2,8 @@
@interface TGCameraTimeCodeView : UIView @interface TGCameraTimeCodeView : UIView
@property (nonatomic, assign) UIInterfaceOrientation interfaceOrientation;
@property (nonatomic, copy) NSTimeInterval(^requestedRecordingDuration)(void); @property (nonatomic, copy) NSTimeInterval(^requestedRecordingDuration)(void);
- (void)startRecording; - (void)startRecording;

View File

@ -36,6 +36,8 @@
@interface TGCameraZoomWheelView : UIView @interface TGCameraZoomWheelView : UIView
@property (nonatomic, assign) UIInterfaceOrientation interfaceOrientation;
@property (copy, nonatomic) void(^panGesture)(UIPanGestureRecognizer *gestureRecognizer); @property (copy, nonatomic) void(^panGesture)(UIPanGestureRecognizer *gestureRecognizer);
@property (nonatomic, assign) CGFloat zoomLevel; @property (nonatomic, assign) CGFloat zoomLevel;

View File

@ -229,7 +229,9 @@
strongSelf.zoomChanged(zoomLevel, animated); strongSelf.zoomChanged(zoomLevel, animated);
}; };
[_zoomModeView setZoomLevel:1.0]; [_zoomModeView setZoomLevel:1.0];
if (hasTelephotoCamera || hasUltrawideCamera) {
[self addSubview:_zoomModeView]; [self addSubview:_zoomModeView];
}
_zoomWheelView = [[TGCameraZoomWheelView alloc] initWithFrame:CGRectMake(0.0, frame.size.height - _bottomPanelHeight - _bottomPanelOffset - 132, frame.size.width, 132) hasUltrawideCamera:hasUltrawideCamera hasTelephotoCamera:hasTelephotoCamera]; _zoomWheelView = [[TGCameraZoomWheelView alloc] initWithFrame:CGRectMake(0.0, frame.size.height - _bottomPanelHeight - _bottomPanelOffset - 132, frame.size.width, 132) hasUltrawideCamera:hasUltrawideCamera hasTelephotoCamera:hasTelephotoCamera];
[_zoomWheelView setHidden:true animated:false]; [_zoomWheelView setHidden:true animated:false];
@ -240,7 +242,17 @@
return; return;
[strongSelf->_zoomModeView panGesture:gestureRecognizer]; [strongSelf->_zoomModeView panGesture:gestureRecognizer];
}; };
if (hasTelephotoCamera || hasUltrawideCamera) {
[self addSubview:_zoomWheelView]; [self addSubview:_zoomWheelView];
}
_zoomView = [[TGCameraZoomView alloc] initWithFrame:CGRectMake(10, frame.size.height - _bottomPanelHeight - _bottomPanelOffset - 18, frame.size.width - 20, 1.5f)];
_zoomView.activityChanged = ^(bool active)
{
};
if (!hasTelephotoCamera && !hasUltrawideCamera) {
[self addSubview:_zoomView];
}
_bottomPanelView = [[UIView alloc] init]; _bottomPanelView = [[UIView alloc] init];
[self addSubview:_bottomPanelView]; [self addSubview:_bottomPanelView];
@ -298,9 +310,7 @@
_videoLandscapePanelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 274, 44)]; _videoLandscapePanelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 274, 44)];
_videoLandscapePanelView.alpha = 0.0f; _videoLandscapePanelView.alpha = 0.0f;
_videoLandscapePanelView.backgroundColor = [TGCameraInterfaceAssets transparentPanelBackgroundColor];
_videoLandscapePanelView.hidden = true; _videoLandscapePanelView.hidden = true;
_videoLandscapePanelView.layer.cornerRadius = 3.5f;
[self addSubview:_videoLandscapePanelView]; [self addSubview:_videoLandscapePanelView];
_toastView = [[TGCameraToastView alloc] initWithFrame:CGRectMake(0, frame.size.height - _bottomPanelHeight - 42, frame.size.width, 32)]; _toastView = [[TGCameraToastView alloc] initWithFrame:CGRectMake(0, frame.size.height - _bottomPanelHeight - 42, frame.size.width, 32)];
@ -566,6 +576,8 @@
{ {
bool hasDoneButton = _hasResults; bool hasDoneButton = _hasResults;
_zoomWheelView.clipsToBounds = !hidden;
if (animated) if (animated)
{ {
if (!hidden) if (!hidden)
@ -577,6 +589,11 @@
_bottomPanelBackgroundView.hidden = false; _bottomPanelBackgroundView.hidden = false;
} }
[UIView animateWithDuration:0.2 delay:0.0 options:7 << 16 animations:^{
CGFloat offset = hidden ? 19 : 18 + 43;
_zoomModeView.frame = CGRectMake(floor((self.bounds.size.width - 129.0) / 2.0), self.bounds.size.height - _bottomPanelHeight - _bottomPanelOffset - offset, 129, 43);
} completion:nil];
[UIView animateWithDuration:0.25 animations:^ [UIView animateWithDuration:0.25 animations:^
{ {
CGFloat alpha = hidden ? 0.0f : 1.0f; CGFloat alpha = hidden ? 0.0f : 1.0f;
@ -619,6 +636,9 @@
_bottomPanelBackgroundView.hidden = hidden; _bottomPanelBackgroundView.hidden = hidden;
_bottomPanelBackgroundView.alpha = alpha; _bottomPanelBackgroundView.alpha = alpha;
CGFloat offset = hidden ? 19 : 18 + 43;
_zoomModeView.frame = CGRectMake(floor((self.bounds.size.width - 129.0) / 2.0), self.bounds.size.height - _bottomPanelHeight - _bottomPanelOffset - offset, 129, 43);
if (hasDoneButton) if (hasDoneButton)
{ {
_doneButton.hidden = hidden; _doneButton.hidden = hidden;
@ -647,13 +667,13 @@
{ {
if (_modeControl.cameraMode == PGCameraModeVideo) if (_modeControl.cameraMode == PGCameraModeVideo)
{ {
_topPanelView.alpha = 0.0f;
_videoLandscapePanelView.alpha = 0.0f; _videoLandscapePanelView.alpha = 0.0f;
} }
_flipButton.transform = CGAffineTransformMakeRotation(TGRotationForInterfaceOrientation(orientation)); _flipButton.transform = CGAffineTransformMakeRotation(TGRotationForInterfaceOrientation(orientation));
_flashControl.transform = CGAffineTransformMakeRotation(TGRotationForInterfaceOrientation(orientation)); _flashControl.transform = CGAffineTransformMakeRotation(TGRotationForInterfaceOrientation(orientation));
_zoomModeView.interfaceOrientation = orientation; _zoomModeView.interfaceOrientation = orientation;
_timecodeView.interfaceOrientation = orientation;
} completion:^(__unused BOOL finished) } completion:^(__unused BOOL finished)
{ {
if (_modeControl.cameraMode == PGCameraModeVideo) if (_modeControl.cameraMode == PGCameraModeVideo)
@ -674,8 +694,6 @@
{ {
if (UIInterfaceOrientationIsLandscape(orientation)) if (UIInterfaceOrientationIsLandscape(orientation))
_videoLandscapePanelView.alpha = 1.0f; _videoLandscapePanelView.alpha = 1.0f;
else
_topPanelView.alpha = 1.0f;
} }
} completion:nil]; } completion:nil];
}]; }];
@ -699,7 +717,6 @@
case UIInterfaceOrientationLandscapeLeft: case UIInterfaceOrientationLandscapeLeft:
{ {
_videoLandscapePanelView.hidden = false; _videoLandscapePanelView.hidden = false;
_topPanelView.hidden = true;
_videoLandscapePanelView.transform = transform; _videoLandscapePanelView.transform = transform;
_videoLandscapePanelView.frame = CGRectMake(3, (self.frame.size.height - _videoLandscapePanelView.frame.size.height) / 2, _videoLandscapePanelView.frame.size.width, _videoLandscapePanelView.frame.size.height); _videoLandscapePanelView.frame = CGRectMake(3, (self.frame.size.height - _videoLandscapePanelView.frame.size.height) / 2, _videoLandscapePanelView.frame.size.width, _videoLandscapePanelView.frame.size.height);
@ -708,7 +725,6 @@
case UIInterfaceOrientationLandscapeRight: case UIInterfaceOrientationLandscapeRight:
{ {
_videoLandscapePanelView.hidden = false; _videoLandscapePanelView.hidden = false;
_topPanelView.hidden = true;
_videoLandscapePanelView.transform = transform; _videoLandscapePanelView.transform = transform;
_videoLandscapePanelView.frame = CGRectMake(self.frame.size.width - _videoLandscapePanelView.frame.size.width - 3, (self.frame.size.height - _videoLandscapePanelView.frame.size.height) / 2, _videoLandscapePanelView.frame.size.width, _videoLandscapePanelView.frame.size.height); _videoLandscapePanelView.frame = CGRectMake(self.frame.size.width - _videoLandscapePanelView.frame.size.width - 3, (self.frame.size.height - _videoLandscapePanelView.frame.size.height) / 2, _videoLandscapePanelView.frame.size.width, _videoLandscapePanelView.frame.size.height);
@ -718,20 +734,18 @@
case UIInterfaceOrientationPortraitUpsideDown: case UIInterfaceOrientationPortraitUpsideDown:
{ {
_videoLandscapePanelView.hidden = true; _videoLandscapePanelView.hidden = true;
_topPanelView.hidden = false;
_topPanelView.transform = transform; _topPanelView.transform = transform;
_topPanelView.frame = CGRectMake(0, 0, _topPanelView.frame.size.width, _topPanelView.frame.size.height); _topPanelView.frame = CGRectMake(0, _topPanelOffset, _topPanelView.frame.size.width, _topPanelView.frame.size.height);
} }
break; break;
default: default:
{ {
_videoLandscapePanelView.hidden = true; _videoLandscapePanelView.hidden = true;
_topPanelView.hidden = false;
_topPanelView.transform = transform; _topPanelView.transform = transform;
_topPanelView.frame = CGRectMake(0, 0, _topPanelView.frame.size.width, _topPanelView.frame.size.height); _topPanelView.frame = CGRectMake(0, _topPanelOffset, _topPanelView.frame.size.width, _topPanelView.frame.size.height);
} }
break; break;
} }
@ -749,7 +763,7 @@
- (void)_layoutTopPanelSubviewsForInterfaceOrientation:(UIInterfaceOrientation)orientation - (void)_layoutTopPanelSubviewsForInterfaceOrientation:(UIInterfaceOrientation)orientation
{ {
UIView *superview = _flashControl.superview; UIView *superview = _timecodeView.superview;
CGSize superviewSize = superview.frame.size; CGSize superviewSize = superview.frame.size;
if (superview == _videoLandscapePanelView && superviewSize.width < superviewSize.height) if (superview == _videoLandscapePanelView && superviewSize.width < superviewSize.height)

View File

@ -8,6 +8,7 @@
@interface TGCameraTimeCodeView () @interface TGCameraTimeCodeView ()
{ {
UIView *_backgroundView; UIView *_backgroundView;
UIView *_recordingBackgroundView;
UILabel *_timeLabel; UILabel *_timeLabel;
NSUInteger _recordingDurationSeconds; NSUInteger _recordingDurationSeconds;
@ -25,10 +26,17 @@
_backgroundView = [[UIView alloc] init]; _backgroundView = [[UIView alloc] init];
_backgroundView.clipsToBounds = true; _backgroundView.clipsToBounds = true;
_backgroundView.layer.cornerRadius = 4.0; _backgroundView.layer.cornerRadius = 4.0;
_backgroundView.backgroundColor = [TGCameraInterfaceAssets redColor]; _backgroundView.backgroundColor = [TGCameraInterfaceAssets transparentPanelBackgroundColor];
_backgroundView.alpha = 0.0; _backgroundView.alpha = 0.0;
[self addSubview:_backgroundView]; [self addSubview:_backgroundView];
_recordingBackgroundView = [[UIView alloc] init];
_recordingBackgroundView.clipsToBounds = true;
_recordingBackgroundView.layer.cornerRadius = 4.0;
_recordingBackgroundView.backgroundColor = [TGCameraInterfaceAssets redColor];
_recordingBackgroundView.alpha = 0.0;
[self addSubview:_recordingBackgroundView];
_timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; _timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
_timeLabel.backgroundColor = [UIColor clearColor]; _timeLabel.backgroundColor = [UIColor clearColor];
_timeLabel.font = [TGCameraInterfaceAssets regularFontOfSize:21]; _timeLabel.font = [TGCameraInterfaceAssets regularFontOfSize:21];
@ -45,6 +53,12 @@
[self stopRecording]; [self stopRecording];
} }
- (void)setInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
_interfaceOrientation = interfaceOrientation;
_backgroundView.alpha = UIInterfaceOrientationIsLandscape(interfaceOrientation) ? 1.0 : 0.0;
}
- (void)_updateRecordingTime - (void)_updateRecordingTime
{ {
if (_recordingDurationSeconds > 60 * 60) { if (_recordingDurationSeconds > 60 * 60) {
@ -57,6 +71,7 @@
CGFloat inset = 8.0f; CGFloat inset = 8.0f;
CGFloat backgroundWidth = _timeLabel.frame.size.width + inset * 2.0; CGFloat backgroundWidth = _timeLabel.frame.size.width + inset * 2.0;
_backgroundView.frame = CGRectMake(floor((self.frame.size.width - backgroundWidth) / 2.0), 0.0, backgroundWidth, 28.0); _backgroundView.frame = CGRectMake(floor((self.frame.size.width - backgroundWidth) / 2.0), 0.0, backgroundWidth, 28.0);
_recordingBackgroundView.frame = _backgroundView.frame;
_timeLabel.frame = CGRectMake(floor((self.frame.size.width - _timeLabel.frame.size.width) / 2.0), floor((28 - _timeLabel.frame.size.height) / 2.0), _timeLabel.frame.size.width, _timeLabel.frame.size.height); _timeLabel.frame = CGRectMake(floor((self.frame.size.width - _timeLabel.frame.size.width) / 2.0), floor((28 - _timeLabel.frame.size.height) / 2.0), _timeLabel.frame.size.width, _timeLabel.frame.size.height);
} }
@ -68,7 +83,7 @@
_recordingTimer = [TGTimerTarget scheduledMainThreadTimerWithTarget:self action:@selector(recordingTimerEvent) interval:1.0 repeat:false]; _recordingTimer = [TGTimerTarget scheduledMainThreadTimerWithTarget:self action:@selector(recordingTimerEvent) interval:1.0 repeat:false];
[UIView animateWithDuration:0.2 animations:^{ [UIView animateWithDuration:0.2 animations:^{
_backgroundView.alpha = 1.0; _recordingBackgroundView.alpha = 1.0;
}]; }];
} }
@ -78,7 +93,7 @@
_recordingTimer = nil; _recordingTimer = nil;
[UIView animateWithDuration:0.2 animations:^{ [UIView animateWithDuration:0.2 animations:^{
_backgroundView.alpha = 0.0; _recordingBackgroundView.alpha = 0.0;
}]; }];
} }

View File

@ -54,7 +54,7 @@
CGContextRef context = UIGraphicsGetCurrentContext(); CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [TGCameraInterfaceAssets accentColor].CGColor); CGContextSetStrokeColorWithColor(context, [TGCameraInterfaceAssets accentColor].CGColor);
CGContextSetLineWidth(context, 1.5f); CGContextSetLineWidth(context, 1.0f);
CGContextStrokeEllipseInRect(context, CGRectMake(0.75f, 0.75f, 12.5f - 1.5f, 12.5f - 1.5f)); CGContextStrokeEllipseInRect(context, CGRectMake(0.75f, 0.75f, 12.5f - 1.5f, 12.5f - 1.5f));
knobImage = UIGraphicsGetImageFromCurrentImageContext(); knobImage = UIGraphicsGetImageFromCurrentImageContext();
@ -170,7 +170,11 @@
{ {
_clipView.frame = CGRectMake(22, (self.frame.size.height - 12.5f) / 2, self.frame.size.width - 44, 12.5f); _clipView.frame = CGRectMake(22, (self.frame.size.height - 12.5f) / 2, self.frame.size.width - 44, 12.5f);
CGFloat position = (_clipView.frame.size.width - _knobView.frame.size.width) * self.zoomLevel; CGFloat zoomLevel = self.zoomLevel;
zoomLevel = MAX(1.0, zoomLevel);
CGFloat factor = zoomLevel / 8.0;
CGFloat position = (_clipView.frame.size.width - _knobView.frame.size.width) * factor;
if (self.zoomLevel < 1.0f - FLT_EPSILON) if (self.zoomLevel < 1.0f - FLT_EPSILON)
position = CGFloor(position); position = CGFloor(position);
@ -363,10 +367,10 @@
{ {
_zoomLevel = zoomLevel; _zoomLevel = zoomLevel;
if (zoomLevel < 1.0) { if (zoomLevel < 1.0) {
NSString *value = [NSString stringWithFormat:@"%.1fx", zoomLevel]; NSString *value = [NSString stringWithFormat:@"%.1f×", zoomLevel];
value = [value stringByReplacingOccurrencesOfString:@"." withString:@","]; value = [value stringByReplacingOccurrencesOfString:@"." withString:@","];
if ([value isEqual:@"1,0x"] || [value isEqual:@"1x"]) { if ([value isEqual:@"1,0×"] || [value isEqual:@"1×"]) {
value = @"0,9x"; value = @"0,9×";
} }
[_leftItem setValue:value selected:true animated:animated]; [_leftItem setValue:value selected:true animated:animated];
[_centerItem setValue:@"1" selected:false animated:animated]; [_centerItem setValue:@"1" selected:false animated:animated];
@ -374,13 +378,13 @@
} else if (zoomLevel < 2.0) { } else if (zoomLevel < 2.0) {
[_leftItem setValue:@"0,5" selected:false animated:animated]; [_leftItem setValue:@"0,5" selected:false animated:animated];
if ((zoomLevel - 1.0) < 0.025) { if ((zoomLevel - 1.0) < 0.025) {
[_centerItem setValue:@"1x" selected:true animated:animated]; [_centerItem setValue:@"1×" selected:true animated:animated];
} else { } else {
NSString *value = [NSString stringWithFormat:@"%.1fx", zoomLevel]; NSString *value = [NSString stringWithFormat:@"%.1f×", zoomLevel];
value = [value stringByReplacingOccurrencesOfString:@"." withString:@","]; value = [value stringByReplacingOccurrencesOfString:@"." withString:@","];
value = [value stringByReplacingOccurrencesOfString:@",0x" withString:@"x"]; value = [value stringByReplacingOccurrencesOfString:@",0×" withString:@"×"];
if ([value isEqual:@"2x"]) { if ([value isEqual:@"2×"]) {
value = @"1,9x"; value = @"1,9×";
} }
[_centerItem setValue:value selected:true animated:animated]; [_centerItem setValue:value selected:true animated:animated];
} }
@ -388,8 +392,8 @@
} else { } else {
[_leftItem setValue:@"0,5" selected:false animated:animated]; [_leftItem setValue:@"0,5" selected:false animated:animated];
NSString *value = [[NSString stringWithFormat:@"%.1fx", zoomLevel] stringByReplacingOccurrencesOfString:@"." withString:@","]; NSString *value = [[NSString stringWithFormat:@"%.1f×", zoomLevel] stringByReplacingOccurrencesOfString:@"." withString:@","];
value = [value stringByReplacingOccurrencesOfString:@",0x" withString:@"x"]; value = [value stringByReplacingOccurrencesOfString:@",0×" withString:@"×"];
if (_rightItem.superview != nil) { if (_rightItem.superview != nil) {
[_centerItem setValue:@"1" selected:false animated:animated]; [_centerItem setValue:@"1" selected:false animated:animated];
@ -608,8 +612,6 @@
_hasUltrawideCamera = hasUltrawideCamera; _hasUltrawideCamera = hasUltrawideCamera;
_hasTelephotoCamera = hasTelephotoCamera; _hasTelephotoCamera = hasTelephotoCamera;
self.clipsToBounds = true;
CGFloat side = floor(frame.size.width * 1.1435); CGFloat side = floor(frame.size.width * 1.1435);
CGFloat length = 17.0; CGFloat length = 17.0;
CGFloat smallWidth = MAX(0.5, 1.0 - TGScreenPixel); CGFloat smallWidth = MAX(0.5, 1.0 - TGScreenPixel);
@ -814,21 +816,34 @@
_scaleView.transform = CGAffineTransformMakeRotation(finalAngle); _scaleView.transform = CGAffineTransformMakeRotation(finalAngle);
NSString *value = [NSString stringWithFormat:@"%.1fx", zoomLevel]; NSString *value = [NSString stringWithFormat:@"%.1f×", zoomLevel];
value = [value stringByReplacingOccurrencesOfString:@"." withString:@","]; value = [value stringByReplacingOccurrencesOfString:@"." withString:@","];
value = [value stringByReplacingOccurrencesOfString:@",0x" withString:@"x"]; value = [value stringByReplacingOccurrencesOfString:@",0×" withString:@"×"];
NSString *previousValue = _valueLabel.text; NSString *previousValue = _valueLabel.text;
_valueLabel.text = value; _valueLabel.text = value;
[_valueLabel sizeToFit]; [_valueLabel sizeToFit];
if (panning && ![previousValue isEqualToString:value] && ([value isEqualToString:@"0,5x"] || ![value containsString:@","])) { if (panning && ![previousValue isEqualToString:value] && ([value isEqualToString:@"0,5×"] || ![value containsString:@","])) {
[_feedbackGenerator selectionChanged]; [_feedbackGenerator selectionChanged];
} }
_valueLabel.frame = CGRectMake(TGScreenPixelFloor((self.frame.size.width - _valueLabel.frame.size.width) / 2.0), 30.0, _valueLabel.frame.size.width, _valueLabel.frame.size.height); _valueLabel.frame = CGRectMake(TGScreenPixelFloor((self.frame.size.width - _valueLabel.frame.size.width) / 2.0), 30.0, _valueLabel.frame.size.width, _valueLabel.frame.size.height);
} }
- (void)setInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
_interfaceOrientation = interfaceOrientation;
switch (interfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
break;
case UIInterfaceOrientationLandscapeRight:
break;
default:
break;
}
}
- (void)setHidden:(BOOL)hidden - (void)setHidden:(BOOL)hidden
{ {
self.alpha = hidden ? 0.0f : 1.0f; self.alpha = hidden ? 0.0f : 1.0f;

View File

@ -300,7 +300,7 @@ typedef enum
} }
CGFloat minSide = MIN(_wrapperView.frame.size.width, _wrapperView.frame.size.height); CGFloat minSide = MIN(_wrapperView.frame.size.width, _wrapperView.frame.size.height);
CGFloat diameter = MIN(404.0, minSide - 24.0f); CGFloat diameter = minSide == 320.0 ? 216.0 : MIN(404.0, minSide - 24.0f);
CGFloat shadowSize = 21.0f; CGFloat shadowSize = 21.0f;
CGFloat circleWrapperViewLength = diameter + shadowSize * 2.0; CGFloat circleWrapperViewLength = diameter + shadowSize * 2.0;