我有一个名为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
这里的数学有什么问题?为什么这个文本不会居中呢?
答案 0 :(得分:1)
问题来自于您正在设置每个文本图层的框架而不是其位置。这意味着您将左下角定位在位置所在的位置。这样做:
tl.position = CGPointMake( shiftH + xcenter - xoffset, shiftV + ycenter + yoffset);
tl.bounds = CGRectMake(0,0,charSize.width,charSize.height);
你会发现你的图层正好在你想要的位置。