2016-03-20 3 views
0

У меня есть UIView внутри UIViewController, UIView используется для захвата фотографий с использованием AVCaptureSession.Показать правильное представление после вращения

Следовательно, я не хотел, чтобы мой UIView вращался, когда мое устройство вращается, чтобы реализовать это, я написал этот фрагмент кода.

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
    CGAffineTransform deltaTransform = coordinator.targetTransform; 
    CGFloat deltaAngle = atan2f(deltaTransform.b, deltaTransform.a); 
    CGFloat currentRotation = [[self.camera.layer valueForKeyPath:@"transform.rotation.z"] floatValue]; 
    currentRotation += -1 * deltaAngle + 0.0001; 
    [self.camera.layer setValue:@(currentRotation) forKeyPath:@"transform.rotation.z"]; 
} 
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
    CGAffineTransform currentTransform = self.camera.transform; 
    currentTransform.a = round(currentTransform.a); 
    currentTransform.b = round(currentTransform.b); 
    currentTransform.c = round(currentTransform.c); 
    currentTransform.d = round(currentTransform.d); 
}]; 
} 

В портретном режиме мой UIView открывает полный экран, когда я поворачиваю вращение не оказывает никакого влияния на мою камеру UIView и другие UIViews вращаются плавно, но проблема на вращение в ландшафтном режиме моя камера UIView является не полный экран и принимает случайный размер на экране. Что я делаю неправильно?

Примечание: Я разработал представление с использованием раскадровки

+0

Вы пытались отключить автомакеты? – atulkhatri

+0

Я не могу отключить автомат. Мне нужен мой другой UIView, у которого есть кнопка захвата, кнопка вспышки для правильного поворота –

ответ

0

Auto-Layout Макеты вид камеры, как если бы она не была повернута на оси г.

Я предлагаю вам не использовать автоматическую компоновку для просмотра камеры и создавать & программно. Затем вы можете изменить его рамку в animateAlongsideTransition, не имея дело с ограничениями автоматической компоновки.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    // Create the camera view 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    self.camera = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenSize.width, screenSize.height)]; 
    [self.view addSubview:self.camera]; 
} 


-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 



    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     CGAffineTransform deltaTransform = coordinator.targetTransform; 
     CGFloat deltaAngle = atan2f(deltaTransform.b, deltaTransform.a); 
     CGFloat currentRotation = [[self.camera.layer valueForKeyPath:@"transform.rotation.z"] floatValue]; 
     currentRotation += -1 * deltaAngle + 0.0001; 
     [self.camera.layer setValue:@(currentRotation) forKeyPath:@"transform.rotation.z"]; 

     // Change the camera view's frame to match the screen 
     CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
     self.camera.frame = CGRectMake(0, 0, screenSize.width, screenSize.height); 

    } 
           completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
            CGAffineTransform currentTransform = self.camera.transform; 
            currentTransform.a = round(currentTransform.a); 
            currentTransform.b = round(currentTransform.b); 
            currentTransform.c = round(currentTransform.c); 
            currentTransform.d = round(currentTransform.d); 


           }]; 


} 
Смежные вопросы