@dimib

Почему при использовании таймера, объект возвращается в начальное положение при каждой повторе?

Доброго времени суток.

Просмотрите пожалуйста следующий код:
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myTimer = [NSTimer scheduledTimerWithTimeInterval:4.0f
                                                     target:self
                                                  selector:@selector(create:)
                                                  userInfo:nil
                                                   repeats:YES];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *Touch = [[event allTouches]anyObject];
    CGPoint location = [Touch locationInView:Touch.view];
    
        if ( (location.x <160)&&(location.y>=496)) {
            [UIView setAnimationDuration:0.1f];
            [UIView setAnimationCurve:UIViewAnimationCurveLinear];
            if (bounce.center.x>20) {bounce.center = CGPointMake(bounce.center.x - 20 , bounce.center.y); }
        }
    
        if ((location.x > 160)&&(location.y>=496)) {
            [UIView setAnimationDuration:0.1f];
            [UIView setAnimationCurve:UIViewAnimationCurveLinear];
            if (bounce.center.x<300) {bounce.center = CGPointMake(bounce.center.x + 20 , bounce.center.y); }
        }
}

-(void)create:(NSTimer*)timer {

    CGRect lab = CGRectMake(0, 0, 70, 50);
    l = [[UIImageView alloc] initWithFrame:lab];
    l.backgroundColor=[UIColor greenColor];
    [self.view addSubview:l];
    
    CGRect lab1 = CGRectMake(110, 0, 320, 50);
    l1 = [[UIImageView alloc] initWithFrame:lab1];
    l1.backgroundColor=[UIColor greenColor];
    [self.view addSubview:l1];
    
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:3.0f];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    l.center = CGPointMake(35 , 600);
    l1.center = CGPointMake(270, 600);
    
}

Имеется объект bounce - обычный шарик, который может менять свое положение (подвинуться вправо или влево) в зависимости от нажатия на указанные области экрана.
Далее, методом create я создаю некоторый барьер из двух UIImageView, а затем заставляю их синхронно двигаться, с помощью промежуточной анимации.
Без таймера всё хорошо работает, но мне нужно, что такой барьер создавался в указаной области каждые 4 секунды. Создаваться - создается, и даже правильно двигается. НО: после каждого пройденного шага, шарик с помощью той же промежуточной анимации стремиться в начальное положение. Я так понимаю, что изменения его положения не передается в таймер. Подскажите, пожалуйста, как это исправить?

Спасибо.
  • Вопрос задан
  • 2300 просмотров
Решения вопроса 1
@dimib Автор вопроса
Сам решил проблему. Объект bounce был создан в IB и поставлен на начальное положение, в то время как барьеры и всё прочее создавалось программно. В итоге, при создании и помещении нового барьера , я обращался к UIViewController, а значит и к начальному положению bounce. Поэтому, при использовании таймера, шар возвращался в начальное положение.
Всё стало работать как надо, после того, как я удалил bounce из IB и создал его кодом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы