Iphone 为绘图应用程序创建图层结构

Iphone 为绘图应用程序创建图层结构,iphone,objective-c,cocoa,quartz-graphics,Iphone,Objective C,Cocoa,Quartz Graphics,关于我的问题,我试图创建一个包含NSMuttableArray成员变量CALayerRefs的类,但失败了。有人能告诉我怎么做吗。我想做的基本上是创建CALayerRefs或CGLayerRefs或任何东西,将它们推到我的层变量中,然后,当我需要它们时,获取它们,使用它们的上下文,最后绘制/隐藏/显示/删除它们 我转向你们,伙计们,因为很明显,网络上很少有甚至没有关于在高级水平上使用图层和石英的信息。每个人都立即使用层,不需要管理,也不需要成员变量 谢谢。这是我在几分钟内为自定义视图编写的一些工

关于我的问题,我试图创建一个包含
NSMuttableArray
成员变量
CALayerRef
s的类,但失败了。有人能告诉我怎么做吗。我想做的基本上是创建
CALayerRef
s或
CGLayerRef
s或任何东西,将它们推到我的
变量中,然后,当我需要它们时,获取它们,使用它们的上下文,最后绘制/隐藏/显示/删除它们

我转向你们,伙计们,因为很明显,网络上很少有甚至没有关于在高级水平上使用图层和石英的信息。每个人都立即使用层,不需要管理,也不需要成员变量


谢谢。

这是我在几分钟内为自定义视图编写的一些工作代码,希望对您有所帮助。它创建10个绿色层,并每秒将它们设置到不同的位置

MBLineLayerDelegate *lineLayerDelegate;
@property (nonatomic, retain) NSMutableArray *ballLayers;

- (void)awakeFromNib
{
    self.ballLayers = [NSMutableArray array];
    lineLayerDelegate = [[MBLineLayerDelegate alloc] init];
    for (NSUInteger i = 0; i < 10; i++) {
        CALayer *ball = [CALayer layer];
        CGFloat x = self.bounds.size.width * (CGFloat)random()/RAND_MAX;
        CGFloat y = self.bounds.size.height * (CGFloat)random()/RAND_MAX;
        ball.frame = CGRectMake(x, y, 20, 20);
        ball.backgroundColor = [UIColor greenColor].CGColor;
        ball.delegate = lineLayerDelegate;
        [self.layer addSublayer:ball];
        [self.ballLayers addObject:ball];
    }

    [self performSelector:@selector(animateBallsToRandomLocation) withObject:nil afterDelay:0];
}

- (void)animateBallsToRandomLocation
{
    for (CALayer *layer in self.ballLayers) {
        CGFloat x = self.bounds.size.width * (CGFloat)random()/RAND_MAX;
        CGFloat y = self.bounds.size.height * (CGFloat)random()/RAND_MAX;
        layer.position = CGPointMake(x, y);
    }
    [self performSelector:@selector(animateBallsToRandomLocation) withObject:nil afterDelay:1];
}

假设我想在-(void)animateBallsToRandomLocation中列出的一个层中绘制一条线。我该怎么做?我能得到它们的原始上下文并把它们画进去吗?从今天开始阅读我对另一个问题的回答,在那里,我给你写了一封信,告诉你它是如何工作的——要么扩展CALayer,要么设置一个代理。我希望它不会达到这个目的:)不,我将努力实现你的答案。我已经更新了上面的代码,包含一个画线的代理谢谢你,这是无价的,我甚至不想知道你为我节省了多少小时。
@interface MBLineLayerDelegate : NSObject {
}
- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx;
@end

@implementation MBLineLayerDelegate

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
        CGRect rect = layer.bounds;
        CGContextSaveGState(context);

        CGContextTranslateCTM(context, 0.0, rect.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetAllowsAntialiasing(context, YES);
        CGContextSetShouldAntialias(context, YES);

        CGContextMoveToPoint(context, 0, 0);
        CGContextAddLineToPoint(context, rect.size.width, rect.size.height);

        CGContextRestoreGState(context);
}

@end