Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
Ios 矩形外的CALayer绘图_Ios - Fatal编程技术网

Ios 矩形外的CALayer绘图

Ios 矩形外的CALayer绘图,ios,Ios,我正在使用此代码向自定义UIView添加一个层,它的工作方式很有魅力: CGRect newrect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); CALayer* heartBackground = [CALayer layer]; heartBackground.contents = (__bridge id)([UIImage imageNamed:@"5HeartsGray"].

我正在使用此代码向自定义UIView添加一个层,它的工作方式很有魅力:

 CGRect newrect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
    CALayer* heartBackground = [CALayer layer];
    heartBackground.contents = (__bridge id)([UIImage imageNamed:@"5HeartsGray"].CGImage);
    heartBackground.frame = newrect;
    [self.layer addSublayer:heartBackground];
但当我尝试在使用石英的绘图方法中使用它时,使用了一个新的Rect(如下所示)

它在帧的开头渲染,而不是在ratingRect内部

如果我调用
[heartBackground setNeedsDisplay]
它就会消失。与
heartBackground.masksToBounds=YES的情况相同

我做错了什么。因为使用CoreGraphics,我需要切换到CGLayer吗

这是使用CoreGraphics时的输出(如您所见,心脏从坐标x=0,y=0开始,通常从x=250,y=100开始):
ui视图的绘图函数中创建并绘制
CALayer
是没有意义的
CALayer
是一个可独立绘制的单元,默认情况下,它根据其父层的上下文绘制自身。这意味着,如果您真的想使用单独的Calayer,请尝试向self.layer(在
UIView
中)添加您想要的尽可能多的子层,设置它们的框架,当它们的容器视图显示时,它们就会被绘制出来。关于你的问题,以下是你可以尝试的

选项1:接受此代码

CGRect ratingRect = CGRectMake(250, 100, 150, 20);
CALayer* heartBackground = [CALayer layer];
heartBackground.contents = (__bridge id)([UIImage imageNamed:@"5HeartsGray"].CGImage);
heartBackground.frame = ratingRect;
[self.layer addSubLayer:heartBackground];
退出
drawRect:
方法,并在
initWithFrame:
中编写它,然后在drawRect中只需执行
[heartBackground RenderContext:UIGraphicsGetCurrentContext]

选项2:不使用CALayer绘制您的心

CGRect ratingRect = CGRectMake(250, 100, 150, 20);
[[UIImage imageNamed:@"5HeartsGray"] drawInRect:ratingRect];

您很可能想要
heartBackground.masksToBounds=NO
@MNIFAKRAM请分享您的输出屏幕截图。@AshokLondhe我已经用输出更新了线程。@MNIFAKRAM您的问题仍然不清楚。“你想把心脏放在中心位置吗?”阿育王说,“是的。我无法将它们移动到任何位置,尝试了ratingRect上的多值,但没有希望。
CGRect ratingRect = CGRectMake(250, 100, 150, 20);
[[UIImage imageNamed:@"5HeartsGray"] drawInRect:ratingRect];