将UIView放在UIButton上并仍然突出显示

时间:2012-10-12 07:43:15

标签: iphone ios cocoa-touch uiview uibutton

过去我做过以下事情:

thumbnailButton = [[UIButton alloc] initWithFrame: thumbnailButtonFrame];
[thumbnailButton addTarget:self action:@selector(thumbnailButtonPushed:) forControlEvents:UIControlEventTouchUpInside];
[thumbnailButton setBackgroundImage: thumbnailButtonImage forState: UIControlStateNormal];
[thumbnailButtonImage release];

其中创建了一个按钮,上面有一个缩略图,按下它时会有一个灰色高亮显示(当你从缩略图列表中选择要显示的照片时,就像在照片应用中一样) )。

我现在有一个场景,我有一个UIView类,用drawRect方法绘制图形。我想将此UIView放在UIButton上,如果添加图片,我会以同样的方式突出显示。我想在没有继承UIButton的情况下这样做。这可能吗?

2 个答案:

答案 0 :(得分:3)

这应该有效。然而,它可能不是您正在寻找的确切方法。

它涉及转换UIView in UIImage

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

然后只需在代码中调用此方法。

[thumbnailButton setBackgroundImage:[MyClass imageWithView:myCustomView] forState: UIControlStateNormal];

这可能无法满足你所期望的表现,但它应该有效。

答案 1 :(得分:0)

您可以尝试这种方法..您可以有两个图像,一个用于正常状态,另一个用于突出显示的状态..

btnImage = [UIImage imageNamed:@"buttonInactiveImage.png"];
btnImageSelected = [UIImage imageNamed:@"buttonActiveImage.png"];
btn = [[UIButton alloc] initWithFrame: thumbnailButtonFrame];
btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:btnImage forState:UIControlStateNormal]; // Set the image for the normal state of the button
[btn setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; // Set the image for the selected state of the button

这样您就不必在按钮上添加任何视图