Добавление UIImage из UIImagePickerController в UIButton - PullRequest
2 голосов
/ 29 июля 2010

У меня есть UIButton, на который пользователь нажимает, чтобы вызвать UIImagePickerController.После обработки он возвращает отредактированный UIImage обработчику делегата, который затем должен заполнить UIButton новым изображением.

На практике, однако, что происходит, если пользователь выбираетИзображение из их библиотеки, это отлично работает.Но если они делают снимок с помощью камеры и редактируют его, изображение не достигает значения UIButton.Однако, если я помещаю одно и то же изображение в UIImageView для тестовых целей, оно обнаруживается.

Более того, в Симуляторе это работает нормально, но не работает на устройстве.Это какая-то проблема с памятью?Вот мой код:

- (IBAction)takePictureButtonTapped
{
    UIActionSheet *popupQuery = [[UIActionSheet alloc]
                                 initWithTitle:nil
                                 delegate:self
                                 cancelButtonTitle:@"Cancel"
                                 destructiveButtonTitle:nil
                                 otherButtonTitles:@"Take a Photo", @"Upload from Library", nil];

    popupQuery.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [popupQuery showInView:self.view];
    [popupQuery release];

}

- (void)actionSheet:(UIActionSheet *)actionSheet
clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"actionSheet:clickedButtonAtIndex:%d", buttonIndex);
    if(buttonIndex == 2)
    {
        // cancel
        [imagePickerController release];
    }
    else
    {
        imagePickerController = [[[UIImagePickerController alloc] init] autorelease];
        imagePickerController.delegate = self;
        imagePickerController.allowsEditing = YES;

        if (buttonIndex == 0)
        {
            // Take a photo
            // Set up the image picker controller and add it to the view
            imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
        }
        else if (buttonIndex == 1)
        {
            // Upload from Library
            imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] == NO)
                imagePickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        }


        [self presentModalViewController:imagePickerController animated:YES];
    }
}

- (void)imagePickerController:(UIImagePickerController *)picker
        didFinishPickingImage:(UIImage *)img
                  editingInfo:(NSDictionary *)editInfo
{
    NSLog(@"imagePickerController::didFinishPickingImage:%@", img);
    itemImage = img;
    [itemImage retain];
    [imageButton setBackgroundImage:itemImage forState:UIControlStateNormal];
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];
}

Я пробовал setImage, setBackgroundImage, для ВСЕХ состояний, и ни один из них не работает.Тем не менее, если я помещу то же изображение в UIImageView, это нормально.

Есть идеи?

1 Ответ

2 голосов
/ 06 августа 2010

Я обнаружил, что причина, по которой он не работал должным образом, была в том, что я использовал didFinishPickingImage:editingInfo:, который УСТАРЕЛ.Я должен был использовать imagePickerController:didFinishPickingMediaWithInfo: вместо этого.Теперь он работает отлично!

По какой-то причине XCode не предупреждал меня об устаревании.

...