KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am trying to use CAShapeLayer to mask a CALayer in my iOS app as it takes a fraction of the CPU time to mask an image vs manually masking one in a bitmap context ; When I have several dozen or more images layered over each other, the CAShapeLayer masked UIImageView is slow to move to my touch. Here is some example code: UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"SomeImage.jpg" ofType:nil]]; CGMutablePathRef path = CGPathCreateMutable(); CGPathAddEllipseInRect(path, NULL, CGRectMake(0.f, 0.f, image.size.width * .25, image.size.height * .25)); for (int i = 0; i < 200; i++) { SLTUIImageView *imageView = [[SLTUIImageView alloc]initWithImage:image]; imageView.frame = CGRectMake(arc4random_uniform(CGRectGetWidth(self.view.bounds)), arc4random_uniform(CGRectGetHeight(self.view.bounds)), image.size.width * .25, image.size.height * .25); CAShapeLayer *shape = [CAShapeLayer layer]; shape.path = path; imageView.layer.mask = shape; [self.view addSubview:imageView]; [imageView release]; } CGPathRelease(path); With the above code, imageView is very laggy. However, it reacts instantly if I mask it manually in a bitmap context : UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"3.0-Pad-Classic0.jpg" ofType:nil]]; CGMutablePathRef path = CGPathCreateMutable(); CGPathAddEllipseInRect(path, NULL, CGRectMake(0.f, 0.f, image.size.width * .25, image.size.height * .25)); for (int i = 0; i < 200; i++) { UIGraphicsBeginImageContextWithOptions(CGSizeMake(image.size.width * .25, image.size.height * .25), NO, [[UIScreen mainScreen]scale]); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddPath(ctx, path); CGContextClip(ctx); [image drawInRect:CGRectMa
Tags (comma-separated)
Save Edits
Cancel