我在appdelegate中的didReceiveRemoteNotification:方法中得到了这段代码
我想知道如何使用延迟删除此子视图,假设子视图显示来自推送通知的信息,但我希望它们在3.5秒后消失(delay2)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"remote notification: %@",[userInfo description]);
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
NSString *alert = [apsInfo objectForKey:@"alert"];
NSLog(@"Received Push Alert: %@", alert);
NSString *sound = [apsInfo objectForKey:@"sound"];
NSLog(@"Received Push Sound: %@", sound);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
NSString *badge = [apsInfo objectForKey:@"badge"];
NSLog(@"Received Push Badge: %@", badge);
application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue];
// Create the UILabel instance
CGRect myFrame = CGRectMake(0, 20, 320, 50);
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
myView.backgroundColor = [UIColor blueColor];
[self.window addSubview:myView];
[myView release];
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 300, 20)];
[aLabel setText:alert];
[self.window addSubview:aLabel];
[aLabel release];
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound"ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[theAudio play];
//SONAR//
[self performSelector:@selector(delay2) withObject:nil afterDelay:3.5];
}
-(void)delay2 {
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound"ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[theAudio play];
}
答案 0 :(得分:4)
您可以使用UIView的removeFromSuperview实例方法。 将窗口集标记的视图添加到所有窗口时。在delay2方法中,使用tag& amp;删除它们。 removeFromSuperview方法。
CGRect myFrame = CGRectMake(0, 20, 320, 50);
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
myView.backgroundColor = [UIColor blueColor];
[myView setTag:999];
[self.window addSubview:myView];
[myView release];
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 300, 20)];
[aLabel setText:alert];
[aLabel setTag:999];
[self.window addSubview:aLabel];
[aLabel release];
-(void)delay2 {
for(UIView *subView in window.subviews)
{
if(subView.tag == 999)
[subView removeFromSuperview];
}
}