3

我正在尝试在不使用已弃用的 API 的情况下使用投影来绘制多行文本。它适用于单行。相关代码如下所示:

-(void)drawRect:(CGRect)rect
{
    NSMutableParagraphStyle *paragraph =  [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraph.lineBreakMode = NSLineBreakByWordWrapping;
    paragraph.alignment = NSTextAlignmentCenter;

    UIFont *f = [UIFont systemFontOfSize:20.0];
    NSMutableDictionary *attributes = [NSMutableDictionary new];
    [attributes setValuesForKeysWithDictionary:@{ NSFontAttributeName : f,
                                                  NSParagraphStyleAttributeName : paragraph,
                                                  NSForegroundColorAttributeName    : [UIColor blueColor] }];
    NSShadow * shadow = [NSShadow new];
    shadow.shadowOffset = CGSizeMake(4,4);
    shadow.shadowColor = [UIColor redColor];

   [attributes setValue:shadow forKey:NSShadowAttributeName];

    rect.origin.y = 100;
    [@"test string on one line" drawInRect:rect withAttributes:attributes];

    rect.origin.y = 150;
    [@"test string spanning more than one line" drawInRect:rect withAttributes:attributes];
}

输出如下所示:

iPhone 6 在多行文本上显示没有阴影

我已经在使用 xCode 6 构建的 iPhone 5 (7.1.2)、iPhone 6 (8.0) 上对此进行了测试。在使用 xCode 5 构建时,我也在 iPhone 5 上对其进行了测试。

4

1 回答 1

6

更多的实验,我发现答案是使用 NSAttributedString。

虽然这没有显示阴影:

   NSString *s = @"test string spanning more than one line"
   [s drawInRect:rect withAttributes:attributes]

这样做:

   NSAttributedString *as = [[NSAttributedString alloc] initWithString:s attributes:attributes];
   [as drawInRect:rect];

认为这在任何地方都没有记录,我很想听听。

于 2014-09-24T11:51:32.800 回答