Наложение изображения в UIImagePickerController в зависимости от ориентации устройства - PullRequest
3 голосов
/ 26 июля 2011

У меня есть два наложенных изображения, которые я хочу показать на виде камеры в зависимости от ориентации устройства - одно для горизонтальной и одно для вертикальной ориентации (overlay_v.png и overlay_h.png).Когда устройство поворачивается из вертикальной в вертикальную ориентацию, изображение наложения также должно меняться.

С beginGeneratingDeviceOrientationNotifications я могу только определить ориентацию устройства, но не могу изменить наложение изображений.Любая помощь / другой подход будет очень признателен.

- (IBAction) getPhoto:(id) sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;

    if((UIButton *) sender == choosePhotoBtn) {
        sourceCamera = false;
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    } else {
        sourceCamera = true;
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;

        //overlay image (cannot dynamically switch from vertical to horizontal in here)
        UIImageView *anImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay_v.png"]];            
        anImageView.frame = CGRectMake(0, 0, anImageView.image.size.width, anImageView.image.size.height);
        picker.cameraOverlayView = anImageView;

        //device orientation check   
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didOrientation:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

        [anImageView release];        
    }
    [self presentModalViewController:picker animated:YES];

}

- (void) didOrientation: (id)object {
    UIInterfaceOrientation interfaceOrientation = [[object object] orientation];

    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"portrait");
    } else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft ){
        NSLog(@"landscape");
    }

}

1 Ответ

4 голосов
/ 26 июля 2011

Вы не можете изменить свойство cameraOverlayView после отображения средства выбора.Однако вы можете изменить само представление.Создайте свойство UIView с именем overlayView.Добавьте оба изображения в качестве подпредставлений к этому представлению и используйте свойство tag на каждом изображении, чтобы снова легко получить это представление.Скройте тот, который не должен быть показан для текущей ориентации.

- (void) didOrientation: (id)object {
   UIInterfaceOrientation interfaceOrientation = [[object object] orientation];
   UIImageView *pImageView = [self.overlayView viewWithTag:10];
   UIImageView *lImageView = [self.overlayView viewWithTag:20];

   if (interfaceOrientation == UIInterfaceOrientationPortrait || 
       interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
      NSLog(@"portrait");
      pImageView.hidden = NO;
      lImageView.hidden = YES;
   } else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight || 
      interfaceOrientation == UIInterfaceOrientationLandscapeLeft ){
      NSLog(@"landscape");
      pImageView.hidden = YES;
      lImageView.hidden = NO;
   }

}
...