在视图中添加/删除视图的问题

时间:2012-11-16 21:36:18

标签: iphone ios animation view ios6

我正在尝试添加/删除视图(_countdown)到下面的视图,添加视图没有问题。但是,当我试图删除它时,没有任何反应。我的所有NSLog()都被调用了,所以一切都应该有效。但当它到达 - (void)removeAnimation(试图用动画删除时钟视图,所以它在主视图中不再可见)时,没有任何反应。为什么?我真的不明白为什么。我一直试图解决这个问题几个小时,但我找不到任何方法让它工作......

@implementation MainViewController {
    ClockView *_clock;
    ClockView *_countdown;
}

viewDidLoad中:

-(void)viewDidLoad{
timerAddClock = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkNotificationExist) userInfo:nil repeats:NO];
}

checkNotificationExist:

 -(void)checkNotificationExist {
        NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];

        if ([userDef boolForKey:@"NotificationExist"]) {
            NSDate *notificationDate = [[NSUserDefaults standardUserDefaults] valueForKey:@"NotificationDate"];
            NSDate *now = [NSDate date];

            NSTimeInterval interval = [notificationDate timeIntervalSinceDate:now];

            if (interval > 0) {
            if (_clock == nil) {
                _countdown = [[ClockView alloc] initWithCountdownToTime:[NSDate dateWithTimeIntervalSinceNow:interval]];

                [self.view addSubview:_countdown];

                    [UIView animateWithDuration:0.5f
                                     animations:^{
                                    [_countdown setFrame:CGRectMake((self.view.frame.size.width - _countdown.frame.size.width) / 2, (self.view.frame.size.height), _countdown.frame.size.width, _countdown.frame.size.height)];  
}];
                            }
                    self.timeIntervalTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkTime) userInfo:nil repeats:YES];
                }
}

检查时间

-(void)checkTime {
    NSLog(@"running");


    [timerAddClock invalidate];
    self.timerAddClock = nil;

    NSDate *notificationDate = [[NSUserDefaults standardUserDefaults] valueForKey:@"NotificationDate"];
    NSDate *now = [NSDate date];

    NSTimeInterval interval = [notificationDate timeIntervalSinceDate:now];

    if (interval < 1) {
    NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
    [userDef setBool:NO forKey:@"NotificationExist"];

    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NotificationDate"];

    self.addAnimation = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(removeAnimation) userInfo:nil repeats:YES];
    }

removeAnimation

-(void)removeAnimation {
    NSLog(@"Removing animation...");

    [UIView animateWithDuration:0.5f
                     animations:^{
                         [_countdown setFrame:CGRectMake((self.view.frame.size.width - _countdown.frame.size.width) / 2, (self.view.frame.size.height - 800), _countdown.frame.size.width, _countdown.frame.size.height)];

                     } completion:^(BOOL finished) {
                         [_countdown removeFromSuperView];
                     }];

3 个答案:

答案 0 :(得分:1)

一种可能的解释是,您可能会添加更多_countdown视图中的一个。因此,如果多次调用checkNotifications(有一个带间隔的计时器,所以我认为这是可能的)并且添加_countdown视图的行多次运行,如果你只删除你赢得的视图'看到任何东西,因为重复的视图将位于顶部。

只是一个想法。

答案 1 :(得分:1)

首先,您应该在[super viewDidLoad];方法中致电- (void)viewDidLoad;。另外,您可能已将_countdown视图添加为某处的子视图,这可能会导致问题?

您可能还想再次检查所有NSTimer,并确保正确调用它们。您的addAnimation计时器对我来说似乎很可疑。

您可以尝试隐藏视图,而不是从superview中删除它。这肯定会奏效。

希望有帮助!

答案 2 :(得分:0)

根据您的上一条评论,当您调用removeFromSuperview时,似乎正在播放动画。因此,视图不会被移除。

我认为问题出在你的checkNotificationExists方法中:你创建一个动画,但是在完成块之外启动计时器。尝试在完成块内移动它