【问题标题】:Rendering a CAShapeLayer within custom UIView在自定义 UIView 中渲染 CAShapeLayer
【发布时间】:2014-09-15 10:59:06
【问题描述】:

我在自定义 tableViewCell 中有一个自定义 UIView。我正在尝试渲染两个CAShapeLayers,但没有显示任何内容。

-(void) setUpLayers
{
if (!self.blueWave) {

    self.blueWave = [self createShapeLayer];

    self.blueWave.strokeColor = [UIColor blueColor].CGColor;

    self.redWave = [self createShapeLayer];
    self.redWave.strokeColor = [UIColor redColor].CGColor;

    [self.layer addSublayer:self.blueWave];
    [self.layer insertSublayer:self.redWave above:self.blueWave];

    [self render]; 
    } 
} 


- (CAShapeLayer *) createShapeLayer {
    CAShapeLayer* layer = [[CAShapeLayer alloc] init];
    layer.lineWidth = 2;
    layer.fillColor = nil;


    return layer;
}

此代码在我的自定义UIView 类中的layoutSubviewslayoutSublayersOfLayer 中运行良好,但在我上面的自定义方法中却没有。知道为什么吗?

【问题讨论】:

    标签: ios cocoa-touch core-animation


    【解决方案1】:

    我不知道是什么

    [self createShapeLayer] 
    

    正在这样做,但请确保您将 CAShapeLayer 的框架 设置为 self.bounds 之类的东西。如果您使用的是 self.frame,则图层可能只是在屏幕外渲染。

    或者,我使用了以下代码,可能与您想要做的类似

    CAShapeLayer *rectangle = [CAShapeLayer layer];
    UIBezierPath *rectanglePath=[UIBezierPath bezierPathWithRect:self.bounds];
    rectangle.path=rectanglePath.CGPath;
    rectangle.fillColor = nil;
    rectangle.strokeColor = [UIColor redColor].CGColor;
    rectangle.lineWidth = 2.0;
    rectangle.opacity = 1.0;
    [layer addSublayer:rectangle];
    

    确保在您创建此 shapeLayer 时,您的边界实际上也具有大小。

    【讨论】:

    • 我尝试过self.redWave.frame = self.bounds,但没有成功。我应该在某个特定的地方实施这个吗?
    • 有趣,我以前做过很多次,你发布的代码看起来是正确的。可以看看createShapeLayer方法吗?
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2022-01-10
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多