Steve,

You should be rendering using NSLayoutManager instead of -drawInRect:. The 
method is handling NSTextStorage just as a mere NSAttributedString ignoring the 
rest of objects connected.

Check out the documentation for -[NSLayoutManager 
drawGlyphsInGlyphRange:atPoint:].

Aki

> On Sep 21, 2017, at 6:04 AM, Steve Mills <sjmi...@mac.com> wrote:
> 
> Didn't work the first time I sent this, because something messed up and 
> thought the message was too large, when it's less than 2000 characters.
> 
> No bites on apple-dev.groups.io, so I'll try here.
> 
> 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?
> 
> BTW, if I instead install a UITextView and set its exclusionPaths, it works. 
> So does NSTextStorage not know enough to draw with the exclusionPaths, and I 
> just need to install text views for each one instead?
> 
> -(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
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/aki%40apple.com
> 
> This email sent to a...@apple.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to