1秒弹出窗口

5

如何最好地实现文本+图像消息的发送,同时该“警报/弹出窗口”仅应在1秒内出现(例如限定时间内奖品图片上的消息“您赢了!”)。

2个回答

15

如果你只想展示一个浮动消息一小段时间,并且希望它在显示后渐隐消失,只需创建一个标签和一个简单的动画。此示例将在1秒内显示消息,然后在0.3秒内渐隐消失(假设使用 ARC):

- (void)showMessage:(NSString*)message atPoint:(CGPoint)point {
    const CGFloat fontSize = 24;  // Or whatever.

    UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero];
    label.backgroundColor = [UIColor clearColor];  
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size:fontSize];  // Or whatever.
    label.text = message;
    label.textColor = [UIColor blueColor];  // Or whatever.
    [label sizeToFit];

    label.center = point;

    [self addSubview:label];

    [UIView animateWithDuration:0.3 delay:1 options:0 animations:^{
        label.alpha = 0;
    } completion:^(BOOL finished) {
        label.hidden = YES;
        [label removeFromSuperview];
    }];
}

只需将此方法添加到您的根视图即可。


从关闭原因来看,对我来说也不是很清楚。可能是因为你表达得过于模糊了。不要使用笼统的“什么是最好的方法”,而应该使用“我想做X事情。如何去做?”这样更加明确。 - i_am_jorf
哦,那就把自动释放去掉。 - i_am_jorf
是的,它可以工作。我需要解决一个愚蠢的问题:“ViewController没有可见的@interface声明addSubView选择器。”我错过了什么?我将声明放在了ViewController.h中 - (void)showMessage:(NSString*)message atPoint:(CGPoint)point; - Ilan
1
按照现有的写法,你不想将它添加到你的视图控制器中,而是要添加到一个视图中。具体来说,是添加到一个从UIView派生的类中实现。UIView有子视图和父视图。如果你将它添加到UIViewController中,你需要将那一行改为[self.view addSubview:label],因为你的视图控制器应该有一个view属性,它是当前控制器的根视图。 - i_am_jorf
@jemmamaphone - 太棒了!它起作用了。肯定要接受你的答案...但是...有没有办法为此添加一张图片? - Ilan
显示剩余5条评论

1
如果您不需要用户交互,则可以选择使用 HUD。 SVProgressHUDMBProgressHUD 是很好的实现。
它们通常用于进度,但您也可以用它们来向用户显示临时信息。
以下是一个示例,演示如何使用 SVProgressHUD 轻松显示一条带有自定义图像的消息,持续时间为 1 秒:
[SVProgressHUD showImage:[UIImage imageNamed:@"won-image"] status:@"You Won!"];

假设我想向用户显示“你赢了!”的消息,并在返回到上一个状态屏幕时短暂地将其关闭,而不进行任何更改。简单可重复使用的实现。 - Ilan
作为一个附注,SVProgressHUDMBProgressHUD 可配置性要低得多,例如您无法调整警报持续时间。另一方面,它更易于开箱即用。 - Gabriele Petronella
我很惊讶 - 我以为这个实现会像调用alert方法一样,带有“持续时间”参数... - Ilan
这是一个由Sam Vermette做出的设计选择。他的组件非常易于使用和保持一致,而付出的代价则是定制性。我倾向于赞同他的方法:对于一个简单的项目,我转而使用SVProgressHUD,因为MBProgressHUD已经变得过于复杂,难以维护。 - Gabriele Petronella
实际上,持续时间是根据文本长度计算的,因此这是一个相当智能的默认值。查看此提交。 - Gabriele Petronella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接