如何为UIAlert指定大小

时间:2011-04-07 09:04:02

标签: iphone objective-c

我试图在UIAlert中显示UIImage。

我想几乎全屏显示它。例如,我的图片尺寸为300x450像素 好吧,我把它作为子视图添加到我的UIAlert。

但是UIAlert有默认坐标以保持居中。 所以我可以添加比UIAlert框架更大的图像,但它涵盖了UIAlert ......

我试图为我的UIAlert指定一个框架,但它对它没有任何影响。

事实上,我想将我的图像添加为UIAlert的真实内容,以及简单的文本。

这可能吗?

2 个答案:

答案 0 :(得分:2)

考虑编写自己的Dialog弹出窗口,而不是弄乱UIAlertView。如果你想要使用变换动画很容易实现的“反弹”动画。这是我刚刚制作的一个简单的弹出对话框。

要测试它,请创建一个新的基于视图的应用程序项目并添加此类。然后,您可以通过将以下“使用”代码添加到* ViewController.m

来测试它

这是演示该理论的一个非常简单的例子。在SimpleDialog中显示一个显示弹出窗口的静态方法会更有意义,但我不想让这个例子过于复杂。


SimpleDialog.h

#import <UIKit/UIKit.h>

@interface SimpleDialog : UIView
{

}

- (void) show;

@end

SimpleDialog.m

#import "SimpleDialog.h"

#define BOUNCE_SPEED 1

@implementation SimpleDialog

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // Initialization code
        self.backgroundColor = [UIColor greenColor];

        UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        closeButton.frame = CGRectMake(0, 0, 200, 20);
        closeButton.center = self.center;
        [closeButton setTitle:@"Close" forState:UIControlStateNormal];
        [closeButton addTarget:self action:@selector(hide) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:closeButton];
    }
    return self;
}

- (void) show
{
    UIWindow* window = [UIApplication sharedApplication].keyWindow;
    if (!window)
    {
        window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    }
    [window addSubview:self];

    self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2*BOUNCE_SPEED];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(bounceInStopped)];
    self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
    [UIView commitAnimations];
}

- (void)bounceInStopped
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.15*BOUNCE_SPEED];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(bounceOutStopped)];
    self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
    [UIView commitAnimations];
}

- (void)bounceOutStopped
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.15*BOUNCE_SPEED];
    self.transform = CGAffineTransformIdentity;
    [UIView commitAnimations];
}

- (void) hide
{
    [self removeFromSuperview];
}

@end

用法

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton* popButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    popButton.frame = CGRectMake(0, 0, 200, 20);
    popButton.center = self.view.center;
    [popButton setTitle:@"Pop" forState:UIControlStateNormal];
    [popButton addTarget:self action:@selector(showIt) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:popButton];
}

- (void) showIt
{
    SimpleDialog* simple = [[SimpleDialog alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
    simple.center = self.view.center;
    [self.view addSubview:simple];
    [simple show];
    [simple release];
}

答案 1 :(得分:0)

是的,这是可能的。

但它需要自定义UIAlertView。

使用UIAlertView自定义,您可以添加任何内容。