#ios #uiview #uiscrollview #nstimer
#iOS #uiview #uiscrollview #nstimer
Вопрос:
Я использую следующий код для того, чтобы создать UIScrollView
:
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scroll.pagingEnabled = YES;
NSInteger numberOfViews = 3;
for (int i = 0; i < numberOfViews; i ) {
CGFloat yOrigin = i * self.view.frame.size.width;
UIView *awesomeView = [[UIView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];
awesomeView.backgroundColor = [UIColor colorWithRed:0.5/i green:0.5 blue:0.5 alpha:1];
[scroll addSubview:awesomeView];
}
scroll.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);
[self.view addSubview:scroll];
Вопрос в следующем: как мне реализовать NSTimer
, чтобы менять страницу каждые 4 секунды?
[NSTimer scheduledTimerWithTimeInterval:4.0f
target:self
selector:@selector(updateCounter:)
userInfo:nil
repeats:YES];
Я изо всех сил пытаюсь написать метод updateCounter. Пожалуйста, помогите
- (void)updateCounter:(NSTimer *)theTimer {
NSInteger numberOfViews = 3;
int i = 0; i ;
if (i < numberOfViews) {
yOrigin = i * self.view.frame.size.width;
[scroll scrollRectToVisible:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height) animated:YES];
}
return; }
Хорошо, итак, с помощью этого кода NSTimer
изменяется с просмотра 1 на просмотр 2, но он останавливается, он не меняется через следующие 4 секунды на просмотр 3. Что я хочу сделать, это перейти с просмотра 1 на просмотр 2 через 4 секунды, затем на просмотр 3 через 4 секундыи так далее. Я хочу иметь столько просмотров, сколько мне нужно.
Комментарии:
1. Я думаю, это потому, что вы повторно инициализируете i (i=0) каждый раз, когда вызывается updateCounter. Попробуйте сделать счетчик переменной экземпляра и сбросить его / обратный отсчет, когда я превысил количество страниц.
2. Упс, у вас не должно быть цикла внутри updateCount. Таймер, запускаемый каждые 4 секунды, является своего рода вашим циклом.
Ответ №1:
вы все делаете правильно. Теперь вам нужно реализовать updateCounter
так, чтобы прокрутка ScrollView происходила автоматически. поддерживайте глобальный счетчик ширины. Продолжайте обновлять этот счетчик при каждом вызове updateCounter
. Вы могли бы сделать это следующим образом —
int global_width = self.view.frame.size.width;
int global_height = self.view.frame.size.height;
- (void) updateCounter
{
int width = (global_width%self.view.frame.size.width)*self.view.frame.size.width;
[yourScrollView scrollRectToVisible:CGRectMake(0, 0, width, global_height) animated:YES];
global_width = self.view.frame.size.width;
return;
}
Таким образом, вы продолжаете автоматически переключаться между страницами. Если это работает, все это вводится от руки. Но концепция верна.
Комментарии:
1. Хорошо, поэтому я изменил свой вопрос. КАК вы можете видеть в последней части, я изменил метод updateCounter, и он меняется с просмотра 1 на просмотр 2, но затем он останавливается, как я могу перейти на просмотр 3 через следующие 4 секунды? Спасибо
Ответ №2:
Если вы хотите обновлять счетчик каждые четыре секунды, вызовите свой метод updateCounter следующим образом:
[NSTimer scheduledTimerWithTimeInterval:4.0f
target:self
selector:@selector(updateCounter)
userInfo:nil
repeats:YES];
В том, что вы сделали, есть два отличия. #1, временной интервал составляет 4 секунды. # 2, если у вас нет никаких параметров, входящих в метод updateCounter, не добавляйте двоеточие к селектору.
А затем ваш метод updateCounter:
- (void) updateCounter
{
// what view are you modifying?
// the content view or a subview within the ScrollView's contentView ?
}
Комментарии:
1. В настоящее время у меня есть 3 представления, поэтому я хочу изменить каждое представление с помощью updateCounter. Поэтому, если я добавлю следующее в метод updateCounter: static int count = 0; count ; switch (count amp; 3) { случай 1: перерыв; случай 2: перерыв; случай 3: перерыв; }} Я хочу добавить в каждом случае изображение и звук. Тогда возникает вопрос: как мне написать, что в каждом случае я хочу, чтобы счетчик обновлял текущее представление каждого из моих 3 представлений.