我目前正在实施一个扩展的时间表。当我捏放大到时间线时,我需要绘制的文本保持在 UIView 上的相同相对位置,它们在处理缩放的 UIScrollView 内绘制。(基本上就像谷歌地图上的图钉)但是,我不想垂直缩放,所以我通过覆盖来应用变换:
- (void)setTransform:(CGAffineTransform)newValue;
{
newValue.d = 1.0;
[super setTransform:newValue];
}
这在保持时间线垂直固定并允许它水平扩展方面非常有效。但是,我在 setNeedsDisplay 期间调用的方法中绘制我的文本标签:
for (int i = 1; i < 11; i++)
{
CGRect newFrame = CGRectMake(i * (512.0/11.0) - (512.0/11.0/2.0), self.frame.size.height - 16.0, 512.0/11.0, 32.0);
NSString *label = [NSString stringWithFormat:@"%d", i+1];
[label drawInRect:newFrame withFont:[UIFont systemFontOfSize:14.0]];
}
这会将我的文本绘制在滚动视图中的正确位置,并且几乎可以完美运行。但是,由于我的变换使缩放视图垂直保持静态,文本水平扩展而不是垂直扩展,因此伸展得非常可怕。我似乎无法让文本以正确的纵横比重绘。使用 UILabels 是可行的,但是我将渲染和操作超过 1,000 个这样的标签,所以我最好在 drawRect 或类似的东西中绘制静态图像。
我已经尝试更改要在其中绘制文本的 CGRect(值得一试),并且无法应用 CGAffineTransformIdentity,因为我已经在转换视图以防止其垂直缩放。我还尝试在各种视图中绘制文本但无济于事,而且,如果可以避免的话,我宁愿不填充大量的对象。
谢谢你的帮助!