3

我是 iOS 编程的新手。请帮我解决以下问题

  1. 我有一组视图控制器(.h、.m 和 .XIB)

  2. 我有一组视图(.h&.m)

3.视图类负责使用 -->drawRect -->CALayer 和 sublayers 绘制仪表在这个视图中我有初始化方法,这个方法只有我设置了我的图层和子图层的边界

在这里我粘贴某种代码..

- (void)initialize {
    CGFloat span = fmin(self.frame.size.width, self.frame.size.height);
    frameLayerObject_ = [[OuterFrameLayer alloc] init];
    frameLayer = [[CALayer layer] retain];
    frameLayer.bounds = CGRectMake(250, 50, 710, 320);
    frameLayer.position = self.frame.origin;
    frameLayer.needsDisplayOnBoundsChange = YES;
    frameLayer.delegate = self.frameLayerObject;
    [self.layer addSublayer:frameLayer];
    [frameLayer setNeedsDisplay];

    self.minValue = 0.0;
    self.maxValue = 100.0;
    self.tickStartAngle = M_PI;
    self.tickArcLength = M_PI
    self.lineWidth = span / 200.0;
    self.tickLength = span / 12.0;
    self.minorTickLength = span / 16.0;
    self.tickInset = self.lineWidth;
    textLabel_ = [[UILabel alloc] initWithFrame:CGRectMake(0, 3.0 * self.frame.size.height / 10.0, self.frame.size.width, self.frame.size.height / 10.0)];
    self.textLabel.textColor = [UIColor whiteColor];
    self.textLabel.backgroundColor = [UIColor clearColor];
    self.textLabel.font = [UIFont systemFontOfSize:span / 17.77];
    [self addSubview:self.textLabel];

    needleLayerObject_ = [[gaugeNeedle alloc] init];
    self.needleLayerObject.tintColor = [UIColor whiteColor];
    needleLayer = [[CALayer layer] retain];
    needleLayer.bounds = self.bounds;
    needleLayer.position =CGPointMake(((self.bounds.size.width / 2.0)), ((self.bounds.size.height / 2.0)));

    needleLayer.needsDisplayOnBoundsChange = YES;
    needleLayer.delegate = self.needleLayerObject;
    [self.layer addSublayer:needleLayer];
    [needleLayer setNeedsDisplay];
}

在我的视图控制器中,我在我的 xib 和 .h 中创建了 5 个视图,并且我为所有 5 个视图分配了相同的视图类。

现在的问题是,所有 5 个视图的位置和边界都不同。但是我的 drawRect 视图类对所有视图只有一组边界。因此,如果我在初始化方法中对一个视图的边界和位置进行硬编码,其余 4 个视图就会受到影响。如果你知道我哪里出错了,请告诉我。

提前致谢..

4

1 回答 1

0

您的五个视图中的每一个都应该相对于它们自己的坐标空间执行绘制代码,并且不会有问题。在你的绘图代码中使用 self.bounds 作为矩形,这五个应该都在自己的空间中相同地绘制。不要使用 self.frame,这是在父视图的坐标空间中,并介绍了您遇到的问题。

您可能还想尝试使用 clipsToBounds 属性,当此属性设置为 YES 时,UIView 无法绘制超出其自身边界的内容。

于 2014-11-09T12:12:04.723 回答