Как лучше всего анимировать (простые фигуры) в ответ на прикосновения? - PullRequest
1 голос
/ 06 декабря 2011

У меня есть пользовательский UIView, на котором я хотел бы показывать простые анимированные фигуры в ответ на прикосновения. Например:

  • всякий раз, когда пользователь нажимает на экран, под пальцем появляется кружок с анимацией
  • если пользователь заканчивает касаться круга, то анимация должна исчезнуть
  • если пользователь достигает определенной части экрана, круг должен увеличиваться (плавно)

То, что я делаю сейчас ( см. Код ниже ), это использование touchesBegan, touchesMoved и т. Д., Чтобы получить набор со всеми касаниями. Затем в drawRect я рисую круг для каждого касания. Все супер статично.

Какой лучший способ оживить?

Спасибо!

PS: для полноты вот часть моего кода

- (void)drawRect:(CGRect)rect
{
    for (UITouch *touch in ts) { //ts is the set with all touches
        CGPoint location = [touch locationInView:touch.view];
        CGContextRef context = UIGraphicsGetCurrentContext();

        CGRect rectangle = CGRectMake(location.x-circleSize/2, location.y-circleSize/2+correctionY,
                                          circleSize*1.15, circleSize*1.15);
        CGContextAddRect(context, rectangle);
        CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
        CGContextFillEllipseInRect(context, rectangle);
        /* etc etc */
    }
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ 
    /* etc etc */
    ts = [[NSMutableSet setWithSet: [event touchesForView:self]] retain];
    /* etc etc */
}

1 Ответ

1 голос
/ 06 декабря 2011

Вместо того чтобы использовать drawRect в вашем главном представлении, я бы создал новое подпредставление для каждого объекта.Этими подпредставлениями могут быть UIImageViews или стандартные UIViews, которые вы затем продолжаете рисовать путем создания подкласса drawRect подпредставления.

Затем, было бы тривиально анимировать эти подпредставления, используя методы анимации UIView:

[UIView animateWithDuration:0.3
                 animations:^(void) {
                     // Do something to the view...
                 }];

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

...