CALayer – Shadow causes a performance hit?
So I am doing some custom animations on my navigationcontroller and the way it pushes and pops the viewControllers.
Everything runs smooth. As soon as I add the following code (In a subclass of
UINavigationController), I face a huge performance hit. After adding a shadow all animations become very laggy. Is this expected or am I doing something wrong in the code?
// This code gets called once during NavigationController initialization. [self.view setClipsToBounds:NO]; [self.view.layer setCornerRadius:5]; [self.view.layer setShadowOffset:CGSizeMake(0, 20)]; [self.view.layer setShadowColor:[[UIColor yellowColor] CGColor]]; [self.view.layer setShadowRadius:20.0]; [self.view.layer setShadowOpacity:1];
Changed my shadow radius to 1 and it’s still slow
- CALayer: add a border only at one side
- Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?
- Swift: remove layer, without removing UIView in UITableViewCell
- What does “Receiver type 'CALayer' for instance message is a forward declaration” mean here?
- Center custom UIView vertically and horizontally using Auto Layout
- How to get text in a CATextLayer to be clear
4 Solutions Collect From Internet About “CALayer – Shadow causes a performance hit?”
You should expect a slowdown from adding a shadow. A
shadowRadius of 20 is very high and will be especially slow.
The other key to improve shadow rendering speed: set the
shadowPath property. It can help dramatically.
self.view.layer.shouldRasterize = YES; self.view.layer.rasterizationScale = UIScreen.mainScreen.scale;
I was recently having some issues with slow CALayer shadows, and that simple line of code fixed up everything for me!
shadowPath instead of
theView.layer.shadowPath = [UIBezierPath bezierPathWithRect:theView.bounds].CGPath;
Check this post: iphone – Animation's performance is very poor when view's shadow is on
Yes, shadow’s are very expensive (especially a shadow that big — play with the radius and you’ll notice it makes a huge difference in the degree of slowdown you experience). One way to improve performance is to render it once to a
CGImageContext and just display that image instead of having the layer re-render the shadow every time it redraws (but this doesn’t work if the shadow needs to animate or something).
- Pop up Animation with UIVisualEffects is disabling button underneath
- MKMapView MKCircle renders a circle with too big radius
- OpenCV error: Assertion failed on iOS
- How to write regular expressions in Objective C (NSRegularExpression)?
- How to get screen size using code?
- SecCertificateRef: How to get the certificate information?
- How do I verify reference count in ARC mode?
- Indoor positioning on iOS with Core Location – not accurate?
- Importing header in objective c
- iOS UIImageView scaling image down produces aliased image on iPad 2
- PhoneGap with Django Backend
- Appstore as modal view in iOS6
- Executing code in a different window/view controller from the current window/view controller
- Why Swift closure not capture self?
- UIAlertView crashes when added to app