# Conflicts: # 3rdParty/CMakeLists.txt # 3rdParty/libarchive/CMakeLists.txt # CMakeLists.txt
71 lines
2.4 KiB
Plaintext
71 lines
2.4 KiB
Plaintext
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#import "OpenVulkanoViewController.h"
|
|
|
|
#pragma mark -
|
|
#pragma mark OpenVulkanoViewController
|
|
|
|
@implementation OpenVulkanoOrientationLockableViewController
|
|
-(id)init {
|
|
self = [super init];
|
|
_rotationLockedView = nil;
|
|
return self;
|
|
}
|
|
|
|
-(void) viewDidLoad {
|
|
[super viewDidLoad];
|
|
}
|
|
|
|
- (void)viewWillLayoutSubviews
|
|
{
|
|
[super viewWillLayoutSubviews];
|
|
if (_rotationLockedView != nil)
|
|
{
|
|
_rotationLockedView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
|
|
}
|
|
}
|
|
|
|
-(CGFloat)getOrientation {
|
|
if (_rotationLockedView == nil) return 0;
|
|
return [[_rotationLockedView.layer valueForKeyPath:@"transform.rotation.z"] floatValue];
|
|
}
|
|
|
|
-(void)setOrientation:(CGFloat)angle {
|
|
if (_rotationLockedView != nil) {
|
|
[_rotationLockedView.layer setValue:@(angle) forKeyPath:@"transform.rotation.z"];
|
|
}
|
|
}
|
|
|
|
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
|
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
|
|
|
if (_rotationLockedView != nil)
|
|
{
|
|
[coordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context) {
|
|
CGAffineTransform deltaTransform = coordinator.targetTransform;
|
|
CGFloat deltaAngle = atan2f(deltaTransform.b, deltaTransform.a);
|
|
|
|
CGFloat currentRotation = [self getOrientation];
|
|
// Adding a small value to the rotation angle forces the animation to occur in a the desired direction, preventing an issue where the view would appear to rotate 2PI radians during a rotation from LandscapeRight -> LandscapeLeft.
|
|
currentRotation += -1 * deltaAngle + 0.0001;
|
|
[self setOrientation:currentRotation];
|
|
|
|
} completion:^(id <UIViewControllerTransitionCoordinatorContext> context) {
|
|
// Integralize the transform to undo the extra 0.0001 added to the rotation angle.
|
|
CGAffineTransform currentTransform = _rotationLockedView.transform;
|
|
currentTransform.a = round(currentTransform.a);
|
|
currentTransform.b = round(currentTransform.b);
|
|
currentTransform.c = round(currentTransform.c);
|
|
currentTransform.d = round(currentTransform.d);
|
|
_rotationLockedView.transform = currentTransform;
|
|
}];
|
|
}
|
|
}
|
|
@end
|
|
|
|
|