Rysuję okrąg w metodzie -drawRect:
mojego UIView
przy użyciu standardowego kodu CGContextFillEllipseInRect()
. Chciałbym jednak nieco pulsować (powiększać i zmniejszać) i zmieniać intensywność wypełnienia kolorem animacją. Na przykład, jeśli krąg jest wypełniony kolorem czerwonym, chciałbym pulsować kółkiem i sprawić, że czerwień będzie nieco jaśniejsza i ciemniejsza w czasie z pulsowaniem. Nie mając dużego doświadczenia z Core Animation, jestem trochę zagubiony, jak to zrobić, więc każda pomoc będzie bardzo ceniona.koło draw i animuj rozmiar/kolor
Odpowiedz
Jest to znacznie prostsze, jeśli nie narysujesz okręgu w drawRect:
. Zamiast skonfigurować widok na używanie CAShapeLayer
coś takiego:
@implementation PulseView
+ (Class)layerClass {
return [CAShapeLayer class];
}
system wysyła layoutSubviews
do widoku, gdy zmienia się rozmiar (w tym po raz pierwszy pojawia się to). Mamy przesłonić layoutSubviews
założyć kształt i animowanie go:
- (void)layoutSubviews {
[self setLayerProperties];
[self attachAnimations];
}
Oto jak możemy ustawić ścieżkę warstwy (która decyduje o jego kształt) oraz kolor wypełnienia kształtu:
- (void)setLayerProperties {
CAShapeLayer *layer = (CAShapeLayer *)self.layer;
layer.path = [UIBezierPath bezierPathWithOvalInRect:self.bounds].CGPath;
layer.fillColor = [UIColor colorWithHue:0 saturation:1 brightness:.8 alpha:1].CGColor;
}
musimy dołączyć dwie animacje dla warstwy - po jednym dla ścieżki i jeden dla koloru wypełnienia:
- (void)attachAnimations {
[self attachPathAnimation];
[self attachColorAnimation];
}
Oto jak możemy animować ścieżki w warstwie:
- (void)attachPathAnimation {
CABasicAnimation *animation = [self animationWithKeyPath:@"path"];
animation.toValue = (__bridge id)[UIBezierPath bezierPathWithOvalInRect:CGRectInset(self.bounds, 4, 4)].CGPath;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:animation forKey:animation.keyPath];
}
Oto jak możemy animować warstwa jest koloru wypełnienia:
- (void)attachColorAnimation {
CABasicAnimation *animation = [self animationWithKeyPath:@"fillColor"];
animation.fromValue = (__bridge id)[UIColor colorWithHue:0 saturation:.9 brightness:.9 alpha:1].CGColor;
[self.layer addAnimation:animation forKey:animation.keyPath];
}
Obie metody attach*Animation
użyć metody pomocnika, który tworzy podstawową animację i ustawia go powtarzać w nieskończoność z AUTOREVERSE i jedną sekundę :
- (CABasicAnimation *)animationWithKeyPath:(NSString *)keyPath {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
animation.autoreverses = YES;
animation.repeatCount = HUGE_VALF;
animation.duration = 1;
return animation;
}
- 1. Animuj koło wypełnienia za pomocą płótna
- 2. Android- Google map v2 Draw koło
- 3. Draw koło (używając pikseli zastosowane w obrazie z pętli)
- 4. jQuery Przewijanie w poziomie (kliknij i animuj)
- 5. Animuj CAGradientLayer w Swift
- 6. python draw 3D cube
- 7. Animuj insercje do ItemsControl
- 8. UserControl Animuj tło przycisku
- 9. Metoda Triangle Draw
- 10. Android objectAnimator animuj tłoKolor układu
- 11. Jak wygenerować dokument OpenOffice Draw?
- 12. Koło Libgdx z linewidth
- 13. gładkie koło postępu gwt
- 14. Koło wielokątów przecięcia
- 15. jquery płótno koło
- 16. ProgressDialog przędzenie koło
- 17. narysuj wypełnione koło
- 18. Android Animuj widok z ekranu nie działa
- 19. Automatyczne przenoszenie adnotacji MKMapView - animuj je?
- 20. ListView Animuj wiersze po usunięciu zaznaczonego wiersza
- 21. Czysta CSS Gradient koło granicy
- 22. Wydarzenia koło myszy w Reactjs
- 23. Okno dialogowe Android asyncTask Koło
- 24. Koło rysunku bez wypełnienia IOS
- 25. jQuery Animuj górę (od dołu do góry)
- 26. Tak jak element animuje się, animuj kolejne.
- 27. WPF Animuj właściwość dziecka bez nazwy Nazwa
- 28. Draw cień tylko z 3 stron UIView
- 29. Koło czasu w python3 pandy
- 30. Dziwne wielkie koło Obliczanie odległości
Niesamowite wytłumaczenie. Wielkie dzięki :) – Skoota
Dokładnie tego szukam, ale jak mogę wywołać to z UIView, aby go wyświetlić? Zakładam, że ten kod jest skonfigurowany we własnej klasie. – bmueller
'PulseView' jest podklasą' UIView'. –