2013-06-04 5 views
0

Я пытаюсь создать новый UIView программно из одного из моих .m файлов, а затем вернуться к существующему виду через 5 секунд. Кажется, моя логика отключена, потому что это не то, что я хочу. Мой код ниже.iOS Programmatically Создание представления

UIView *mainView = self.view; 

UIView *newView = [[UIView alloc] init]; 
newView.backgroundColor = [UIColor grayColor]; 
self.view = newView; 

sleep(5); 
self.view = mainView; 

Кажется, что он просто спит в течение 5 секунд, а затем ничего не делает.

Я хочу сделать следующее,

  • магазин начиная вид
  • Создать новый вид
  • Показать серый Посмотреть
  • Подождите 5 секунд
  • Показать мой первоначальный вид

Где я иду не так? Я чувствую, что это должна быть моя логика или мне не хватает ключевой части этих шагов.

Спасибо за помощь! :)

+2

использовать 'performSelector: withObject: afterDelay:' НЕ ИСПОЛЬЗУЙТЕ sleep(). Группируйте всю свою логику после части 'sleep' в методе и используйте' performSelector'. – danypata

+0

@ danypata Должен ли я использовать команду '[self performSelector: @selector (returnToMainView) withObject: mainView afterDelay: 5.0]; 'и затем создать метод' - (void) returnToView: (UIView *) mainView {' –

+0

Да, это должно сработать. – danypata

ответ

1

Прежде всего НЕ ИСПОЛЬЗОВАТЬ sleep(). Вы должны использовать метод performSelector:withObject:afterDelay:. Что-то вроде этого:

-(void)yourMethodWhereYouAreDoingTheInit { 
    UIView *mainView = self.view; 
    UIView *newView = [[UIView alloc] init]; 
    newView.backgroundColor = [UIColor grayColor]; 
    self.view = newView; 
    [self performSelector:@selector(returnToMainView:) 
       withObject:mainView 
       afterDelay:5.0]; 
} 

-(void)returnToMainView:(UIView *)view { 
    //do whatever after 5 seconds 
} 
0
- (void)showBanner { 
UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds]; 
newView.backgroundColor = [UIColor grayColor]; 
[self.view addSubview:newView]; 

[newView performSelector:@selector(removeFromSuperView) withObject:nil afterDelay:5.0f]; 
} 

Очень предварительные, но должны работать

+0

'no visible @interface для UIView объявляет селектор addSubView' –

+0

' addSubview', а не 'addSubView'. – rmaddy

+0

Простите, я написал это с Windows PC и не проверял. Я предположил, что автор темы может понять, что я хочу сказать. – NeverBe

0

Использование GCD дает гораздо более читаемый код, но в конечном итоге это вопрос предпочтения.

// Create grayView as big as the view and add it as a subview 
UIView *grayView = [[UIView alloc] initWithFrame:self.view.bounds]; 
// Ensure that grayView always occludes self.view even if its bounds change 
grayView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
grayView.backgroundColor = [UIColor grayColor]; 
[self.view addSubview:grayView]; 
// After 5s remove grayView 
double delayInSeconds = 5.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [grayView removeFromSuperview]; 
}); 
Смежные вопросы