2015-03-04 15 views
-3

Приветствую вас, я был бы рад, если вы поможете мнеЗадержка следующего вида для iPhone

Я хотел знать, как я задерживаю следующий вид?

Я имею в виду, что у меня есть вид с кнопкой, и нажимая на кнопку, я показываю картинку. Я хочу подождать несколько секунд после того, как я покажу ПИК и переключатель в модальном к следующему представлению

Я попробовал много, и это не работает

Вот пример для моей попытки:

- (IBAction)button1Click:(id)sender { 
    // here after i click i want to show the pic in imageview for some seconds 
    self.imageView.image = [UIImage imageNamed:@"bird.png"]; 
    // and then i call to the function for waiting some seconds before the view change by modal 
    [self delayView]; 
} 

- (void)delayView { 
    [NSThread sleepForTimeInterval:8.0]; 
} 

Также я пытаюсь использовать:

[self performSelector : @selector() withObject : self afterDelay : 3.00]; 

, но я не знаю точно, как использовать @selector()

Пожалуйста, я был бы признателен за вашу помощь

+0

Добро пожаловать на SO. Что вы пробовали? показать нам! Пожалуйста, покажите свои коды, отредактировав свой вопрос. – Raptor

ответ

1

Если вы смотрите в performSelector документации, вы обнаружите, что вы можете использовать его, чтобы задержать функцию в течение 3 секунд:

[self performSelector:@selector(delayView2) withObject:nil afterDelay:3.0f]; 

delayView2, где находится:

- (void)delayView2 { 
    self.imageView.image = [UIImage imageNamed:@"bird.png"]; 
} 

Таким образом, вы должны изменить код из IBAction в:

- (IBAction)button1Click:(id)sender { 
    [self performSelector:@selector(delayView2) withObject:nil afterDelay:3.0f]; 
} 
1

dispatch_after предпочитается performSelector: подход, а также работает так же в Swift:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 

    <#code to be executed after a specified delay#> 

}); 

И в отличие от вашего sleepForTimeInterval: подхода, он не будет блокировать основной поток.

Подробнее см. this answer.

+0

Можете ли вы объяснить, почему 'dispatched_after' является предпочтительным для' performSelector: '? – Raptor

+1

В этом конкретном случае это не имеет значения, но обычно рекомендуется избегать 'performSelector:', потому что он запрещает компилятору проверять тип и может вызвать утечку памяти в некоторых случаях (см. [Этот ответ] (http: // stackoverflow. com/a/20058585/1445366) для более подробного объяснения). –

+0

хороший. Я думал, что единственным преимуществом 'dispatch_after' является то, что я могу передавать примитивные типы в блок. – Raptor

-2

Я изменил код ниже, попробуйте это и дайте мне знать, если вы сталкиваетесь любые другие вопросы:

- (IBAction)button1Click:(id)sender { 
self.imageView.image = [UIImage imageNamed:@"bird.png"]; 
[self performSelector:@selector(delayView) withObject:nil afterDelay:3.0f]; 
} 

- (void)delayView { 
[self.navigationController pushViewController:myNextView animated:YES]; 
} 
+1

зачем пульт управления? ОП не упоминает об этом в вопросе. Кроме того, изображение не задерживается. – Raptor

+0

привет. Мне нужно щелкнуть по кнопке и показать изображение в течение нескольких секунд, а затем изменить вид в MODAL (как определить следующий вид модальности в функции delayView?), Помогите мне спасибо –

+0

Freinds can кто-нибудь мне помогает?Я застрял, как вы представили, что происходит, когда я нажимаю кнопку, она остается недоступной для временной задержки, и фотография быстро заменяется на изображении, и вы не видите ее, и новое представление появляется быстро в модальном режиме, поэтому то, что мне нужно, - после того, как вы нажмете кнопку, чтобы показать изображение с задержкой в ​​несколько секунд, а затем перейдите к новому виду в модальном формате, пожалуйста, помогите мне застрять, и мне нужна ваша помощь. Спасибо –

Смежные вопросы