2013-07-25 14 views
5

Użyłem klasy stworzonej przez "mayoff" (Rob Mayoff) "UIImageView + animowany GIF", który został zaproponowany w jednej z odpowiedzi tutaj na stackoverflow. UIImageView+animatedGIFUIImageView + animowany GIF zawsze LOOPS

Za jego pomocą mogę importować animowane obrazy .gif do UIImageView na iOS. Ta klasa działa bezbłędnie, ale jedynym problemem jest to, że .gif zawsze się zapętla. Bez względu na to, jak go wyeksportuję (eksportuję obraz z photoshopa - 67 klatek, ustawię powtórzyć na "raz"), pętle będą na zawsze w UIImageView.

ja sprowadzam .gif z tych dwóch linii:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"Loading" withExtension:@"gif"]; 
self.loadingImageView.image = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url]]; 

bardzo prosty i działa. Próbowałem ustawić właściwość animationRepeatCount na 1, jak zalecił Rob, ale to nie wystarczyło. Próbowałem również ustawić właściwość animationImages o nazwie UIImageView na gifImage.images, zamiast tylko ustawić właściwość obrazu widoku na gifImage. W takim przypadku .gif w ogóle nie animuje.

Jakieś pomysły, jak to zrobić .gif tylko raz? Mogę wymyślić wiele sztuczek (jak ustawienie ostatniej klatki gifa, która pojawi się po pewnym czasie, ale najpierw spróbuję czegoś prostszego, jeśli to możliwe).

Odpowiedz

16

Wziąłem aplikację testową z tego projektu i zmieniła sposób do tego viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"gif"]; 
    UIImage *testImage = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url]]; 
    self.dataImageView.animationImages = testImage.images; 
    self.dataImageView.animationDuration = testImage.duration; 
    self.dataImageView.animationRepeatCount = 1; 
    self.dataImageView.image = testImage.images.lastObject; 
    [self.dataImageView startAnimating]; 
} 

Po uruchomieniu programu aplikacji, to ożywia obraz raz, a potem pokazuje tylko ostatnią klatkę. Jeśli podłączysz przycisk, który wysyła [self.dataImageView startAnimating], dotknięcie przycisku uruchamia animację jeszcze raz, a następnie zatrzymuje się ponownie na ostatniej klatce.

Upewnij się, że ustawiasz widok obrazu tak jak powyżej. Upewnij się, że jesteś , a nie, ustawiając właściwość widoku obrazu na obraz image animowanego obrazu. Aby animacja została zatrzymana, właściwość image widoku obrazu musi być ustawiona na obraz inny niż animowany.

+0

dzięki! To załatwiło sprawę! – jovanjovanovic

+0

Rob, czy możesz sprawdzić moje pytanie za pomocą 'UIImage + animowany GIF' w nakładce widoku mapy http://stackoverflow.com/questions/20558591/animated-gif-not-working-in-mkmapview-overlay-using-mkoverlayrenderer? noredirect = 1 # comment30789828_20558591. Nie mogę uzyskać twojej kategorii do animowania gifu w nakładce. – wigging

+0

@Gavin, to może działać https://github.com/rishi420/Animated-GIF-iPhone –

1

Mam rozwidlony „UIImage-z-animowane-gif” wykonanego przez „Dreddik” i dodaje metodę delegata

#pragma mark - AnimatedGifDelegate 
- (void)animationWillRepeat:(AnimatedGif *)animatedGif 
{ 
    NSLog(@"animationWillRepeat"); 
    //[animatedGif stop]; 
} 

Więc wiesz czas kiedy animacja będzie powtórzyć i zrobić swoje własne rzeczy w środku każde powtórzenie. Możesz policzyć liczbę powtórzeń animacji i zatrzymać animację po osiągnięciu określonej liczby.

rozwidloną repozytorium jest w https://github.com/rishi420/Animated-GIF-iPhone