2014-04-08 66 views
0

我有一個設置查看更改個人資料照片,以及封面圖片, 我把它設置是這樣的:UIImagePicker只出現一次

- (IBAction)coverPressed:(id)sender 
{ 
    buttonPressed = 1; 
    if (self.image == nil) { 
     self.imagePicker = [[UIImagePickerController alloc] init]; 
     self.imagePicker.delegate = self; 
     self.imagePicker.allowsEditing = NO; 

     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
      [self performSelector:@selector(takePhoto) withObject:nil]; 
     } else { 
      [self performSelector:@selector(chooseFromLibrary) withObject:nil]; 
     } 

     self.imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.imagePicker.sourceType]; 
     [self presentViewController:self.imagePicker animated:NO completion:nil]; 
    } 
} 

- (void) avatarPressed:(id)sender 
{ 
    buttonPressed = 2; 
    if (self.image == nil) { 
     self.imagePicker = [[UIImagePickerController alloc] init]; 
     self.imagePicker.delegate = self; 
     self.imagePicker.allowsEditing = NO; 

     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
      [self performSelector:@selector(takePhoto) withObject:nil]; 
     } else { 
      [self performSelector:@selector(chooseFromLibrary) withObject:nil]; 
     } 

     self.imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.imagePicker.sourceType]; 
     [self presentViewController:self.imagePicker animated:NO completion:nil]; 
    } 
} 

-(void)takePhoto 
{ 
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    } 

    // image picker needs a delegate, 
    [imagePickerController setDelegate:self]; 

    // Place image picker on the screen 
    [self presentViewController:imagePickerController animated:YES completion:nil]; 
} 



-(void)chooseFromLibrary 
{ 
    UIImagePickerController *imagePickerController= [[UIImagePickerController alloc]init]; 
    [imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 

    // image picker needs a delegate so we can respond to its messages 
    [imagePickerController setDelegate:self]; 

    // Place image picker on the screen 
    [self presentViewController:imagePickerController animated:YES completion:nil]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    if (buttonPressed == 2) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
     image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

     avatar = [image thumbnailImage:200 transparentBorder:0 cornerRadius:0 interpolationQuality:kCGInterpolationMedium]; 
     avatarSmall = [image thumbnailImage:40 transparentBorder:0 cornerRadius:0 interpolationQuality:kCGInterpolationMedium]; 
    } 
    if (buttonPressed == 1) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
     image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

     cover = [image thumbnailImage:320 transparentBorder:0 cornerRadius:0 interpolationQuality:kCGInterpolationMedium]; 
    } 

} 

但是,如果我按「變更資料圖片」 UIButton並選擇一個圖像,我不能再按下「更改封面圖片」或者反之亦然,在我的代碼中是否有什麼錯誤使它只出現一次?

+0

嗯,你的按鈕邏輯只是做的東西,如果'self.image == nil'但圖像選擇器返回後,你設置'self.image',對?如果你想讓這些按鈕繼續工作,那麼刪除'nil'檢查? – bgfriend0

+0

@ bgfriend0哦,上帝,我現在覺得自己很愚蠢,這就是我在接下來的教程中得到的結果!謝謝! –

回答

0

在這些方法中....

- (void) avatarPressed:(id)sender 
{ 
    buttonPressed = 2; 
    if (self.image == nil) { 
     self.imagePicker = [[UIImagePickerController alloc] init]; 
     self.imagePicker.delegate = self; 
     self.imagePicker.allowsEditing = NO; 

     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
      [self performSelector:@selector(takePhoto) withObject:nil]; 
     } else { 
      [self performSelector:@selector(chooseFromLibrary) withObject:nil]; 
     } 

     self.imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.imagePicker.sourceType]; 
     [self presentViewController:self.imagePicker animated:NO completion:nil]; 
    } 
} 

您正在執行的情侶選擇的,它們本身呈現的圖像拾取,然後直後的if語句您呈現另一圖像拾取。

想想你的方法應該是這樣的

- (void) avatarPressed:(id)sender 
{ 
    buttonPressed = 2; 

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     [self performSelector:@selector(takePhoto) withObject:nil]; 
    } else { 
     [self performSelector:@selector(chooseFromLibrary) withObject:nil]; 
    } 

} 
+0

哇,我沒有意識到,我正在學習一個教程,但我想我無法將它應用到我需要相機的任何地方,謝謝! –