尝试从uiimagepicker中选择图像后将图像设置为按钮图像

时间:2013-11-17 17:30:11

标签: objective-c ios7 uiimage uiimagepickercontroller xcode5

我试图在一段时间内得到这个问题的答案。我想要做的是激活UIImagePickerController并从相机中选择或从goto库中选择。这部分工作正常。然后我想将该图像设置为我用来触发图像选择器的按钮顶部的按钮图像。在iOS 6中运行得很好。从iOS 7开始,图像不会被设置为按钮图像。我已经尝试了许多链接并阅读了很多帖子,甚至通过开发论坛也没有成功找到答案。这是我在转向苹果技术支持之前寻求答案的绝望尝试的最后一部分。我希望有人能够帮助我。下面是我从UIImagePickerController选择图像后用于将图像设置为按钮的代码。

- (IBAction)choosePhoto
{
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
[self presentViewController:imagePicker animated:YES completion:nil];
}
- (IBAction)takePhoto {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];

}
- (void)imagePickerController:(UIImagePickerController*)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info
 {
 if (imagePicker) {
    self.image = [info objectForKey:UIImagePickerControllerEditedImage];
    [self.choosePhotoButton setImage:self.image forState:UIControlStateNormal];

 } else {

    if (picker) {
        self.image = [info objectForKey:UIImagePickerControllerEditedImage];
     [self.takePhotoButton setImage:self.image forState:UIControlStateNormal];
    }
 }

[self dismissViewControllerAnimated:YES completion:nil];
imagePicker = nil;
}

目前在选择任一按钮后,其上设置的图像是按钮的色调,如下面的屏幕截图所示。两个白色方块是选中图像的按钮。

Screen Shot

有人可以查看我的代码并帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您应该查看UIButton类参考中引用的名为“Buttons”的文档。将图像添加到按钮(系统类型)时,它会添加到标题的左侧并作为模板图像,除非您将图像的渲染模式设置为UIImageRenderingModeAlwaysOriginal。所以,如果你想要左边的图像,你可以这样做:

- (IBAction)setImageForSender:(id)sender {
    UIImage *buttonImage = [UIImage imageNamed:@"pic2.jpg"];
    buttonImage = [buttonImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [sender setImage:buttonImage forState:UIControlStateNormal];
}

如果您想要标题下的图像(并在按钮中居中),请设置背景图像。这通常显示,您不必处理渲染模式。

- (IBAction)setImageForSender:(id)sender {
        UIImage *buttonImage = [UIImage imageNamed:@"pic2.jpg"];
        [sender setBackgroundImage:buttonImage forState:UIControlStateNormal];
}

以下是“按钮”文档的相关部分:

  

图片

     

使用Image(currentImage)字段,您可以指定图像   出现在按钮的内容中。如果按钮有标题,   此图像显示在其左侧,否则将居中。该   图像不会拉伸或缩小,因此请务必选择图像   这是您按钮中显示的正确尺寸。请注意这个图像   将自动呈现为按钮内的模板图像,   除非您明确将其渲染模式设置为   UIImageRenderingModeAlwaysOriginal。有关更多信息,请参阅模板   图像。

     

Background(currentBackgroundImage)字段允许您指定   图像显示在按钮内容后面并填充整个框架   按钮。您指定的图像将拉伸以填充按钮(如果是)   太小。如果它太大,它将被裁剪。

如果您为按钮设置了特定尺寸,则上面文本中有关正在裁剪的图像的最后一条信息是否太大。如果它的大小由其内在内容大小决定(如果您只是在IB中拖出一个按钮并且不给它大小限制,则默认大小),它将扩展到图像的大小。