W moim app mam UIView
korzystającą CALayer
w celu osiągnięcia cień:Płynna animacja podczas ożywiania CALayer za shadowPath
@implementation MyUIView
- (instancetype) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if(!self) return self;
self.layer.shadowColor = [UIColor colorWithWhite:0 alpha:.2].CGColor;
self.layer.shadowOffset = CGSizeMake(0, 2);
self.layer.shadowOpacity = 1;
self.layer.shadowRadius = 1;
return self;
}
@end
Jeśli chcę coś zbliża rozsądną wydajność, muszę zdefiniować CALayer
' s shadowPath
:
@implementation MyUIView
- (void) setFrame:(CGRect)frame {
[super setFrame:frame];
self.layer.shadowPath = CGPathCreateWithRect(self.bounds, NULL);
}
@end
zauważyłem dwie rzeczy ilekroć animować tę UIView
:
Jeśli że nie użyć
shadowPath
, cień animuje wzdłuż ładnie obrotów i zmiany wielkości ramy. Zastrzeżenie tutaj to bardzo powolna animacja i ogólny brak wydajności.Jeśli zrobić zastosowanie
shadowPath
gdyUIView
jest animowana animacji jest gładka i w odpowiednim czasie, jednak samo przejście cieniu jest znacznie bardziej blokowa (mniej gładka), niż to jest bezshadowPath
.
Przykłady:
- Z
shadowPath
: https://gfycat.com/ColdBlissfulIndusriverdolphin (? Zauważ, że cień zachowuje się jak słabo przekształcona prostokąta) - Bez
shadowPath
(powolność animacji jest bardziej widoczne na urządzeniu, ale masz pomysł): https://gfycat.com/ActiveRemorsefulBandicoot
Edit:
Warto zauważyć, że te animacje są niejawne - Nie mówię im, powołując się. Są one wynikiem obracania się wraz z orientacją urządzenia w zakresie UIViewController
. Cień znajduje się na UIView
, który zmienia rozmiar podczas obrotu.
Częścią problemu jest to, że podczas gdy ścieżki są animatable, nie mają _implicit_ animacje (te, które są wywoływane przez zmianę właściwości). Podczas obrotu ramka animuje się, ale ścieżka natychmiast zmienia swoją wartość końcową. –
@ DavidRönnqvist Ah. To ma sens. Czy jest sposób na zrobienie tego ręcznie? – mattsven
Tak, możesz ręcznie dodać animację. Ale jeśli nie uzyskasz takiego samego czasu i czasu trwania jak animacja klatek, nie będzie to wyglądało dobrze. –