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