2010-08-26 3 views
3

Je souhaite que le UIImagePickerController démarre (et reste) en mode d'orientation Paysage. J'ai essayé la solution telle que décrite ici (UIImagePickerController in Landscape)UIImagePickerController en orientation paysage

//Initialize picker 

UIImagePickerController * picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 


//set Device to Landscape. This will give you a warning. I ignored it. 
//warning: 'UIDevice' may not respond to '-setOrientation:' 
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

//Set Notifications so that when user rotates phone, the orientation is reset to landscape. 
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

//Refer to the method didRotate: 
[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(didRotate:) 
       name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 

//Set the picker source as the camera 
picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

//Bring in the picker view 
[self presentModalViewController:picker animated:YES]; 

La méthode didRotate:

- (void) didRotate:(NSNotification *)notification 
{ 
     //Maintain the camera in Landscape orientation 
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

} 

Mais la solution ne fonctionne pas pour iOS 4.0. L'application ne répond pas lorsque la caméra est lancée dans iOS 4.0. Quelqu'un peut-il suggérer un travail autour de cela?

+0

Quelqu'un s'il vous plaît suggérer une solution. – random

+0

regardez http://stackoverflow.com/questions/20468335/ios7-ipad-landscape-only-app-using-uiimagepickercontroller/20468336#20468336 –

Répondre

1

Vous pouvez utiliser ALAssetsLibrary et la classe d'actifs pour obtenir les images dans votre appareil et vous pouvez les utiliser pour afficher en mode paysage et en mode portrait comme uiimagepicker.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [activity startAnimating]; 


    appObj=(ImagePickerAppDelegate *)[[UIApplication sharedApplication]delegate]; 

    void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
    { 
     if(result != NULL) 
     { 
      //assets is a mutualable array...for storing the images that are in the device.. 
      [assets addObject:result]; 
     } 
    }; 

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) 
    { 
     if(group != nil) 
     { 
      [group enumerateAssetsUsingBlock:assetEnumerator]; 
     } 
     //meth is a user defined method.. 
     [self meth]; 
     [activity stopAnimating]; 
     [activity setHidden:YES]; 
    }; 
    assets = [[NSMutableArray alloc] init]; 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:assetGroupEnumerator 
         failureBlock: ^(NSError *error) { NSLog(@"Failure");}]; 
} 


-(void)meth 
{ 
    NSLog(@"%i",[assets count]); 

    if(userOrientation==UIInterfaceOrientationPortrait || userOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     NSLog(@"haii"); 
     [scrollView removeFromSuperview]; 

     scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)]; 
     scrollView.backgroundColor=[UIColor whiteColor]; 

     NSLog(@"%i",[assets count]); 
     for (int i = 0; i < [assets count]; i++) 
     { 
      imgBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
      [imgBtn setFrame:CGRectMake((i%4*80)+2,(i/4*80)+2,75,75)]; 
      imgBtn.tag=i; 
      [imgBtn addTarget:self action:@selector(imageClicked:) forControlEvents:UIControlEventTouchUpInside]; 
      ALAsset *asset=[assets objectAtIndex:i]; 
      [imgBtn setImage:[UIImage imageWithCGImage:[asset thumbnail]] forState:UIControlStateNormal]; 
      [scrollView addSubview:imgBtn]; 
     } 
     scrollView.contentSize = CGSizeMake(320,(([assets count]/4)+1)*300); 
    } 

    if(userOrientation==UIInterfaceOrientationLandscapeRight || userOrientation==UIInterfaceOrientationLandscapeLeft) 
    { 
     [scrollView removeFromSuperview]; 
     scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 480,320)]; 
     for (int i = 0; i < [assets count]; i++) 
     { 
      imgBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
      [imgBtn setFrame:CGRectMake((i%6*80)+2,(i/6*80)+2,75,75)]; 
      imgBtn.tag=i; 
      [imgBtn addTarget:self action:@selector(imageClicked:) forControlEvents:UIControlEventTouchUpInside]; 
      ALAsset *asset=[assets objectAtIndex:i]; 
      [imgBtn setImage:[UIImage imageWithCGImage:[asset thumbnail]] forState:UIControlStateNormal]; 
      [scrollView addSubview:imgBtn]; 
     } 
     scrollView.contentSize = CGSizeMake(480,(([assets count]/4)+1)*300); 
    } 
    [self.view addSubview:scrollView]; 
} 



-(void)imageClicked:(UIButton *)sender 
{ 
    //for picking the images that the user has selected we are using other array "selectedImages" i.e declared in the app delegate 
    ALAsset *asset=[assets objectAtIndex:sender.tag]; 
    [appObj.selectedImages addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]]; 
    NSLog(@"%i",[appObj.selectedImages count]); 
    [self.navigationController popViewControllerAnimated:YES ]; 
} 
0

est ici une solution en utilisant [currentDevice endGeneratingDeviceOrientationNotifications]

UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease]; 
picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
picker.delegate = self; 

// Display the camera. 
[self presentModalViewController:picker animated:YES]; 

// Given by default your orientation is in landscaperight already 
while ([currentDevice isGeneratingDeviceOrientationNotifications]) 
    [currentDevice endGeneratingDeviceOrientationNotifications]; 

Source: Disable rotation in UIImagePicker

Questions connexes