Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Animacja krok po kroku - ruch z punktu A do B przez pośrednie punkty


  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 21 maja 2013 - 20:32

Cześć,

Walczę z pewnym problemem już dość długi czas. Mam obiekt w punkcie A i chcę go przesunąć do punktu B po obszarze podzielonym na kratki. Każda kratka to inna lokalizacja. W tablicy przechowuję punkty po jakich ma ruszać się obiekt przechodząc z punktu A do punktu B. Chciałbym zanimować ten ruch tak, by każdy krok aż do celu trwał pewien okres czasu. Póki co nie udało mi się zdziałać nic sensownego. Próbowałem już wszystkiego i skończyłem na tym:

                for (int i = 0; i < points.count; i++)
                {
                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                        [UIView animateWithDuration:0.5 animations:^{
                            NSValue *value = points[i];
                            CGPoint point = [value CGPointValue];
                            [ball moveBallToPosition:point];
                        }];
                    }];
                }

Proszę o pomoc.

#2 P_P

P_P
  • 131 postów
  • SkądWarszawa

Napisano 22 maja 2013 - 07:44

uzyj animateWithDuration:animations:completion:, trzymaj sobie blok completion w propertasie, w ktorym bedzie kolejna animacja, a jako completion znowu ten sam blok, i w tym bloku na poczatku update'uj wpolrzedne do ktorych ma sie przesunac obiekt (a jezeli juz dolecial do konca, to zniluj i animacja sie skonczy)


o tak:
@property (nonatomic, strong) void(^animationCompletion)(BOOL);
CGFloat static kAnimationDuration = 0.3;
...

CGPoint myPoint = CGPointMake(x, y)
NazwaKlasy __weak weakSelf = self;

self.animationCompletion = ^(BOOL finished) {
myPoint = CGPointMake... //update wspolrzednych
if (doszlo do ostatniego punktu) {
  weakSelf.animationCompletion = nil
}
UIView animateWithDuration:kAnimationDuration animations:^{
  //animujesz do myPoint
} completion:weakSelf.animationCompletion;
}

UIView animateWithDuration:kAnimationDuration animations:^{
  //animujesz do myPoint
} completion:self.animationCompletion;


#3 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 22 maja 2013 - 12:34

Dzięki, sprawdzę jak wrócę do domu.

#4 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 22 maja 2013 - 18:44

@P_P, bardzo dziękuję za cenną poradę. Działa :)

#5 P_P

P_P
  • 131 postów
  • SkądWarszawa

Napisano 22 maja 2013 - 19:10

Na zdrowie ;]




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych