iPhone установить некоторую задержку времени

HI;

В моем приложении для iPhone в UipickerView я могу программно перемещать значения выбора вверх или вниз

Чтобы добавить эффект анимации, например, сборщик перемещается только для этого


[picker selectRow:0 inComponent:0 animated:YES]; 

----    ---
//here I need Some time delay

[picker selectRow:3 inComponent:0 animated:YES]; 

Как я могу дать некоторую задержку между выполнением этих двух операторов

Пожалуйста, помогите и предложите

Спасибо


person ios    schedule 07.03.2011    source источник


Ответы (4)


Если вы хотите добавить некоторую задержку, вы можете использовать:

[NSThread sleepForTimeInterval:0.5];

Но это заблокирует ваше приложение, поэтому лучше использовать таймер:

//In your method :
[picker selectRow:0 inComponent:0 animated:YES]; 

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(animatePickerTimer:) userInfo:picker repeats:NO];


//In the same class


-(void)animatePickerTimer:(NSTimer *)timer;
{
    [self performSelectorOnMainThread:@selector(animatePicker:) withObject:(UIPickerView *)timer.userInfo waitUntilDone:NO];

    //Not sure if this is required, since the timer does not repeat
    [timer invalidate];
}

-(void)animatePicker:(UIPickerView *)picker
{
[picker selectRow:3 inComponent:0 animated:YES];
}

Это должно выполняться в основном потоке, поскольку UIKit не является потокобезопасным.

person Julien    schedule 07.03.2011
comment
Спасибо. это работает. Могу ли я выполнить выбор selectRow для случайного значения, означающего, что в моем приложении я хочу каждый раз останавливать анимацию выбора в случайной точке. значения будут только из моего массива, но индекс будет другим - person ios; 07.03.2011
comment
Конечно, вам просто нужно изменить 3 в selectRow:3. Допустим, у вас есть массив NSNumbers *myArray, вы можете получить случайное число: int randIndex = arc4random() % [myArray count]; а затем используйте [picker selectRow:[[myArray objectAtIndex:randIndex] intValue] inComponent:0 анимированный:YES]; - person Julien; 07.03.2011

Вы имеете в виду этот метод

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated
person Robin    schedule 07.03.2011
comment
Спасибо за ответ. Да, похоже на это при нажатии кнопки: [picker selectRow: 0 inComponent: 0 анимированный: YES]; но здесь я хочу дать некоторую задержку между изменением значения Selectedraw, так что оно будет выглядеть как анимация. - person ios; 07.03.2011
comment
если вы поставите YES для последнего значения (animated:), то это будет выглядеть как анимация. - person Robin; 07.03.2011

Вы можете попробовать вызвать второй выбор после задержки с помощью метода performSelector: withObject: afterDelay:

person visakh7    schedule 07.03.2011

что насчет этого:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1];
[UIView setAnimationDelay:0.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[self.pickerView selectRow:row inComponent:0 animated:NO];

[UIView commitAnimations];

Это сработало для меня как шарм!

Я думал, что это никогда не сработает, но это довольно хорошо!

person Adam    schedule 26.09.2011