如何从多个子视图的视图控制器设置CAlayer边界

时间:2013-09-10 11:08:06

标签: iphone ios calayer drawrect bounds

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

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

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

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

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

    - (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个视图将受到影响。如果你知道我哪里出错了,请告诉我。

    提前致谢..

1 个答案:

答案 0 :(得分:0)

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

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