I'm trying to use exclusionPaths for the first time and am not having any success. For now, I'm just creating the stuff on the fly in my drawLayer:inContext: method:. The string draws, but doesn't exclude any path no matter what I set it to. I'm also not that familiar with the whole NSTextStorage/NSLayoutManager/NSTextContainer family, other than using snippets of code in the past, so it could be I'm doing something dumb. Any ideas?
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
{
if([layer.name isEqualToString:@"balloons"]) {
UIGraphicsPushContext(ctx);
CGRect box = CGRectMake(0, 0, 400, 400);
NSTextStorage* storage = [[NSTextStorage alloc] initWithString:@"I like little pigs who run and scurry away from the butcher, because the butcher is carrying a large cleaver and wants to chop them up into delicious sandwiches!" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:36]}];
UIBezierPath* bez = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)];
NSLayoutManager* lman = [NSLayoutManager new];
[storage addLayoutManager:lman];
NSTextContainer* cont = [[NSTextContainer alloc] initWithSize:box.size];
cont.exclusionPaths = @[bez];
[lman addTextContainer:cont];
// Trying different things to see if they make it work - nope.
[lman textContainerChangedGeometry:cont];
[lman invalidateLayoutForCharacterRange:NSMakeRange(0, storage.length) actualCharacterRange:nil];
[storage drawInRect:box];
UIGraphicsPopContext();
}
}
--
Steve Mills
Drummer, Mac geek