Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何从我的视图控制器为多个子视图设置CAlayer边界_Iphone_Ios_Calayer_Drawrect_Bounds - Fatal编程技术网

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

Iphone 如何从我的视图控制器为多个子视图设置CAlayer边界,iphone,ios,calayer,drawrect,bounds,Iphone,Ios,Calayer,Drawrect,Bounds,我不熟悉iOS编程。请帮我解决以下问题 我有一套视图控制器(.h、.m和.XIB) 我有一组视图(.h和.m) 3.视图类负责使用 -->drawRect -->CALayer和Sublayer 在这个视图中,我有一个initialize方法,这个方法只为我的层和子层设置边界 这里我粘贴了一些代码 - (void)initialize { CGFloat span = fmin(self.frame.size.width, self.frame.size.height); fra

我不熟悉iOS编程。请帮我解决以下问题

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

  • 我有一组视图(.h和.m)

  • 3.视图类负责使用 -->drawRect -->CALayer和Sublayer 在这个视图中,我有一个initialize方法,这个方法只为我的层和子层设置边界

    这里我粘贴了一些代码

    - (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视图类对于所有视图只有一组边界。因此,如果我在initialize方法中对一个视图的边界和位置进行硬编码,剩下的4个视图就会受到影响。如果你知道我哪里出了问题,请告诉我


    提前感谢..

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

    如果将clipsToBounds属性设置为“是”,则可能还需要尝试使用该属性,UIView无法绘制超出其自身边界的内容