So, ich versuche nun schon länger ein Bild in ein simples CALayer-Objekt zu malen. Dazu habe ich folgenden Miminal-Code geschrieben
Und die Implementation (etwas lax aber wesentlich)
1. Wenn ich den Code so umkommentiere, dass die UIImageView dargestellt wird, dann wird note.png korrekt angezeigt.
2. Wenn ich in viewWillAppear den ersten Codeblock einkommentiere und den zweiten auskommentiere, dann wird ein Feld 200x200 groß mit blauem Hintergrund gemalt und darauf eine Linie, funktioniert also korrekt.
3. Wenn ich das Programm so ausführe, wie es oben steht, dann wird einfach nix gemalt und ich weiss absolut nicht warum. Hab das nach einem Beispiel auf dem Apple Developer Seiten gemacht Klicke hier.
Kann mir jemand erklären warum die Grafik nicht gemalt wird?
Code:
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface DrawPNGOnCALayerViewController : UIViewController {
CGImageRef img;
CALayer* noteLayer;
UIImageView* imgView;
}
@end
Und die Implementation (etwas lax aber wesentlich)
Code:
#import "DrawPNGOnCALayerViewController.h"
@implementation DrawPNGOnCALayerViewController
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
UIImage* image = [UIImage imageNamed:@"note.png"];
img = CGImageRetain( image.CGImage );
}
return self;
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
noteLayer = [[CALayer alloc] init];
//[self.view.layer addSublayer:noteLayer];
/*imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"note.png"]];
[self.view addSubview:imgView];*/
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGContextSetRGBStrokeColor(ctx, 0.f, 0.f, 0.f, 1.0);
CGContextSetLineWidth(ctx, 1.0);
CGContextMoveToPoint(ctx, 0.f, 10.f);
CGContextAddLineToPoint(ctx, 200.f, 10.f);
CGContextStrokePath(ctx);
}
- (void)viewWillAppear:(BOOL)animated {
/*
noteLayer.delegate = self;
noteLayer.bounds = CGRectMake(0.f, 0.f, 200.f, 200.f);
noteLayer.backgroundColor = [[UIColor blueColor] CGColor];
noteLayer.position = self.view.center;
[noteLayer setNeedsDisplay];
*/
noteLayer.delegate = self;
noteLayer.bounds = CGRectMake( 0.f,0.f, CGImageGetWidth(img),CGImageGetHeight(img));
noteLayer.frame = CGRectMake(0.,0.,CGImageGetWidth(img),CGImageGetHeight(img));
noteLayer.contents = (id)img;
noteLayer.position = CGPointMake( 50.f,50.f );
[noteLayer setNeedsDisplay];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
1. Wenn ich den Code so umkommentiere, dass die UIImageView dargestellt wird, dann wird note.png korrekt angezeigt.
2. Wenn ich in viewWillAppear den ersten Codeblock einkommentiere und den zweiten auskommentiere, dann wird ein Feld 200x200 groß mit blauem Hintergrund gemalt und darauf eine Linie, funktioniert also korrekt.
3. Wenn ich das Programm so ausführe, wie es oben steht, dann wird einfach nix gemalt und ich weiss absolut nicht warum. Hab das nach einem Beispiel auf dem Apple Developer Seiten gemacht Klicke hier.
Kann mir jemand erklären warum die Grafik nicht gemalt wird?