gpt4 book ai didi

iphone - 使用 NSString drawInRect 绘制旋转文本

转载 作者:行者123 更新时间:2023-12-03 18:20:06 27 4
gpt4 key购买 nike

我找到了关于如何使用 NSString drawInRect: 绘制旋转文本的答案,但我不确定它是如何工作的,因为它只对我有用: https://discussions.apple.com/thread/1779814?start=0&tstart=0

我的代码如下:

           CGContextSaveGState(context);
CGContextDrawLinearGradient(context, gradient, CGPointMake(0, centY - halfWidth), CGPointMake(0, centY + halfWidth), 0);

// Add text
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
NSString *str = @"some test string";

CGAffineTransform transform1 = CGAffineTransformMakeRotation(M_PI/4);

CGContextConcatCTM(context, transform1);
CGContextTranslateCTM(context, 0, 0);
UIFont *font = [UIFont systemFontOfSize:16.0];

[str drawInRect:CGRectMake(0, 0, 200, 100) withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UIBaselineAdjustmentNone];

因此,当我使用此功能时,我看到文本绘制在 x 轴下方 45 度的位置。我想沿着我的线性渐变垂直绘制文本。所以我想我可以通过使用 M_PI/2 90 度来做到这一点。但我没有看到我的文字。我尝试了不同的旋转变换,但只有一些似乎可以工作,例如 M_PI/4 和 M_PI/8。我认为如果我使用 -M_PI/4 ,文本将在 x 轴上方 45 度,而 M_PI/2 将在 x 轴下方 90 度。但两者都一无所获。

有什么想法吗?谢谢。

最佳答案

我用下面的方法解决了这个问题。

1) 在 NSString 上声明类别

@interface NSString (NMSchemeItemDraw)
-(void) drawWithBasePoint:(CGPoint)basePoint
andAngle:(CGFloat)angle
andFont:(UIFont*)font;
@end

此类别将使用给定的中心点、一行、给定的字体和角度绘制文本。

2)该类别的实现如下所示:

@implementation NSString (NMSchemeItemDraw)

-(void) drawWithBasePoint:(CGPoint)basePoint
andAngle:(CGFloat)angle
andFont:(UIFont *)font{
CGSize textSize = [self sizeWithFont:font];

CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform t = CGAffineTransformMakeTranslation(basePoint.x, basePoint.y);
CGAffineTransform r = CGAffineTransformMakeRotation(angle);


CGContextConcatCTM(context, t);
CGContextConcatCTM(context, r);

[self drawAtPoint:CGPointMake(-1 * textSize.width / 2, -1 * textSize.height / 2)
withFont:font];

CGContextConcatCTM(context, CGAffineTransformInvert(r));
CGContextConcatCTM(context, CGAffineTransformInvert(t));
}
@end

3)现在我可以在我的 [UIView drawRect:] 方法中使用它。例如,采用以下方式:

 -(void)drawRect:(CGRect)rect{
NSString* example = @"Title";
[example drawWithBasePoint:CGPointMake(0.0f, 0.0f)
andAngle:M_PI
andFont:[UIFont boldSystemFontOfSize:16.0]];
}

关于iphone - 使用 NSString drawInRect 绘制旋转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com