关于我的问题an eralier question,我尝试过但未能创建一个包含NSMuttableArray
成员变量且持有CALayerRef
的类。有人可以指导我如何做到这一点。我想要做的基本上是创建CALayerRef
或CGLayerRef
或其他什么,将它们推入我的layers
变量,然后,当我需要它们时,获取,使用它们的上下文,最后绘制/隐藏/显示/删除它们。
我转向你们,伙计们,因为很明显,在使用图层和Quartz的高级网络上,网上几乎没有任何信息。每个人都立即使用层,不需要管理,没有成员变量。
谢谢。
答案 0 :(得分:1)
这是我在几分钟内编写的自定义视图的一些工作代码,希望它有所帮助。它创建了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];
}
以下是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