为什么我的弯曲文字不能居中?

时间:2013-04-16 17:07:16

标签: ios objective-c math geometry core-animation

我有一个名为UIView的{​​{1}}子类。它使用dpCurvedLabel来围绕弧形弯曲文本。它工作正常,除了我无法在图层父视图中完美居中。我希望弧的中心点位于视图的正中心(即使视图较小),因此所有文本字符与中心的距离相同。

我可以让它关闭,但它总是至少几个像素关闭。它“关闭”的数量似乎受到我给每个CATextLayers的帧大小的影响。数学有问题,但我无法弄清楚是什么。我的代码:


CATextLayer

dpCurvedLabel.h

// instantiate a dpCurvedLabel in a super view
dpCurvedLabel *curvedLabel = [[dpCurvedLabel alloc] 
initWithFrame:CGRectMake(0, 0, 200, 200) arcSize:360 radius:50 
text:@"curve curve curve " font:[UIFont fontWithName:@"HelveticaNeue" size:18] 
textColor:[UIColor whiteColor]];

// You can animate a rotation to see a more pronounced effect
// [curvedLabel rotateContinously];

[self addSubview:curvedLabel];

dpCurvedLabel.m

#import <UIKit/UIKit.h>

@interface dpCurvedLabel : UIView

@property CGFloat arcSize;
@property CGFloat radius;
@property (strong) NSString *text;
@property (strong) UIFont *font;
@property (strong) UIColor *textColor;

- (id)initWithFrame:(CGRect)frame arcSize:(CGFloat)arcSize radius:(CGFloat)radius
text:(NSString *)text font:(UIFont *)font 
textColor:(UIColor *)textColor;
- (void)rotateContinously;

+ (void)makeCurvedText:(CALayer *)layer arcSize:(CGFloat)arcSize radius:(CGFloat)radius 
text:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor;

@end

这里的数学有什么问题?为什么这个文本不会居中呢?

1 个答案:

答案 0 :(得分:1)

问题来自于您正在设置每个文本图层的框架而不是其位置。这意味着您将左下角定位在位置所在的位置。这样做:

    tl.position = CGPointMake( shiftH + xcenter - xoffset, shiftV + ycenter + yoffset);
    tl.bounds   = CGRectMake(0,0,charSize.width,charSize.height);

你会发现你的图层正好在你想要的位置。