Переключение между двумя изображениями во время сна - PullRequest
0 голосов
/ 20 мая 2011

Мне нужно переключаться определенное количество раз между двумя (или, может быть, позже, более) изображениями после нажатия кнопки, и подождать секунду или две для изменения.При нажатии кнопки остановки в любое время переключение должно прекратиться.Мой код к настоящему времени выглядит следующим образом:

IBOutlet UIImageView *exerciseView;

- (void) repetitionCycle {

    stopButtonPressed = NO;
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    for (NSInteger counter = kRepetitions; counter >=0; counter--) {
        exerciseView.image = [UIImage imageNamed:@"blue.jpg"];  
        [NSThread sleepForTimeInterval:kSleepDuration];                                                                 
        if (stopButtonPressed) {break;}     

        image = [UIImage imageNamed:kExerciseEndingPosition];                                                           
        exerciseView.image = [UIImage imageNamed:@"image1.jpg"];
        [NSThread sleepForTimeInterval:kSleepDuration];     

        if (stopButtonPressed) {break;}     
    }

    self.stopRepetitionCycle;
    [pool release];

}

exercView. Помимо прочего, в stopRepetitionCycle я просто установил для stopButtonPressed значение YES, поэтому он останавливается после того, как впервые завершил «for».Он начинает обратный отсчет, останавливается после одного цикла, но не меняет картинку.

Пока я возился, я установил начальную картинку с помощью IB, так что она наконец-то показала НИЧЕГО. Самое интересное,когда я нажимаю кнопку остановки в нужный момент, отображается вторая картинка.Поэтому я догадался, что мне нужно устанавливать вид каждый раз, когда изображение должно переключаться.Но

        [self.exerciseView addSubview:image];

дает мне ошибку

Incompatible Objective-C types "struct UIImage *", expected "struct UIView *" when passing argument 1 of "addSubview:" from distinct Objective-C type

Также

        [self.exerciseView.image addSubview:image];

не выполняет работу и дает мне

UIImage may not respond to addSubview

Есть идеи, что мне здесь делать?

Большое спасибо!

Ответы [ 4 ]

1 голос
/ 20 мая 2011

uuhm ...

ваше использование [NSThread sleep...] озадачивает мое ...

на самом деле: если вы находитесь на вторичном потоке (имеется в виду, а не на главном потоке), товы делаете что-то недопустимое, то есть пытается получить доступ к интерфейсу пользователя из вторичного потока .

, это может объяснить странное поведение, которое вы видите.

с другой сторонырука, если это основной поток, возможно, не очень хорошая идея вызывать sleep..., потому что таким образом вы полностью заблокируете пользовательский интерфейс, и вы не сможете перехватить нажатие кнопки ...

В любом случае, я бы предложил использовать NSTimer s для перехода от одного изображения к следующему через определенные промежутки времени.когда кнопка остановки скрыта, вы просто отмените таймер, и слайд-шоу закончится.довольно чисто.

что касается сообщений об ошибках, которые вы имеете с вашим изображением, то факт, что UIImage не является UIView, поэтому вы не можете добавить его в качестве подпредставления, но это не то, что делаетздесь не работает ...

0 голосов
/ 20 мая 2011

Использование UIImageView .Он имеет встроенную поддержку для этого.

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"blue.jpg"], [UIImage imageNamed:@"image1.jpg"], nil];
imageView.animationDuration = kSleepDuration * [imageView.animationImages count];

Подключите эту функцию к кнопке пуска

- (IBAction) startAnimation {
    [imageView startAnimating];
}

и к кнопке остановки

- (IBAction) stopAnimation {
    [imageView stopAnimating];
}
0 голосов
/ 20 мая 2011

Метод addSubview используется для добавления только UIViews. Вы не можете использовать его с классом UIImage. Общий синтаксис:

[(UIView) addSubview:(UIView*)];

заменить

[self.exerciseView addSubview:image];  

с

self.exerciseView.image = image;  

По той же причине

[self.exerciseView.image addSubview:image];  

тоже не сработает.

0 голосов
/ 20 мая 2011

Обновление пользовательского интерфейса в цикле почти гарантированно завершится неудачей. Скорее всего, вам следует использовать NSTimer для замены изображения с заданным интервалом.

Кроме того, [self.exerciseView addSubview: image] не работает, потому что вы передаете UIImage, а не UIView. Создайте UIImageView (который является подклассом UIView) с вашим UIImage и передайте его вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...