我尝试过改编Travis'他上周在这里给我(C4 saving part of an image)将屏幕保存为C4Image。 我认为它应该像这样工作:
CGFloat scale = 5.0;
//begin an image context
CGSize rect=CGSizeMake(self.canvas.width, self.canvas.height);
UIGraphicsBeginImageContextWithOptions(rect, NO, scale);
//create a new context ref
CGContextRef c = UIGraphicsGetCurrentContext();
//render the original image into the context
[self.canvas renderInContext:c];
//grab a UIImage from the context
UIImage *newUIImage = UIGraphicsGetImageFromCurrentImageContext();
//end the image context
UIGraphicsEndImageContext();
//create a new C4Image
self.currentAlphabetImage = [C4Image imageWithUIImage:newUIImage];
C4Log(@"self.currentAlphabetImage:%@", self.currentAlphabetImage);
self.currentAlphabetImage.width=self.canvas.width/2;
self.currentAlphabetImage.center=self.canvas.center;
self.currentAlphabetImage.backgroundColor=navBarColor;
[self.canvas addImage:self.currentAlphabetImage];
......即使Log给了我
self.currentAlphabetImage:C4Image: 0x15840970; baseClass = UIControl;
frame = (0 0; 320 568); layer = C4Layer: 0x15842590>>
......屏幕上没有显示任何内容......但是,画布上的内容本应该被捕获......
而且,我不知道什么是错的。使用objectiveC的其他尝试也没有解决(例如,iOS Screenshot part of the screen)
答案 0 :(得分:0)
我发现它需要一些解决方法。如上所示的代码在C4Workspace中工作正常,但在尝试将子视图保存为图像时
所以我的代码现在看起来像这样 的 C4Workspace.h 强>
#import "C4CanvasController.h"
#import "testView.h"
@interface C4WorkSpace : C4CanvasController{
testView *test;
}
@end
<强> C4Workspace.m 强>
@implementation C4WorkSpace
-(void)setup {
test= [testView new];
test.canvas.frame=CGRectMake(0, 0, self.canvas.width, self.canvas.height);
[test setup];
[self.canvas addSubview:test.canvas];
[self listenFor:@"save" andRunMethod:@"save"];
}
-(void)save{
CGFloat scale = 5.0;
//begin an image context
CGSize rect=CGSizeMake(self.canvas.width, self.canvas.height);
UIGraphicsBeginImageContextWithOptions(rect, NO, scale);
//create a new context ref
CGContextRef c = UIGraphicsGetCurrentContext();
//render the original image into the context
[test.canvas renderInContext:c];
//grab a UIImage from the context
UIImage *newUIImage = UIGraphicsGetImageFromCurrentImageContext();
//end the image context
UIGraphicsEndImageContext();
//create a new C4Image
test.currentAlphabetImage = [C4Image imageWithUIImage:newUIImage];
C4Log(@"self.currentAlphabetImage:%@", test.currentAlphabetImage);
test.currentAlphabetImage.width=test.canvas.width/2;
test.currentAlphabetImage.center=test.canvas.center;
[test.canvas addImage:test.currentAlphabetImage];
}
@end
<强> testView.h 强>
#import "C4CanvasController.h"
@interface testView : C4CanvasController{
C4Shape *shape;
}
@property (readwrite, strong) C4Image *currentAlphabetImage;
@end
<强> testView.m 强>
#import "testView.h"
@implementation testView
-(void)setup{
shape=[C4Shape rect:CGRectMake(0, 0, self.canvas.width, self.canvas.height)];
shape.lineWidth=3;
shape.fillColor=[UIColor colorWithRed:0.5 green:1 blue:0.2 alpha:1];
[self.canvas addShape:shape];
[self listenFor:@"touchesBegan" andRunMethod:@"saveFunc"];
}
-(void)saveFunc{
[self postNotification:@"save"];
C4Log(@"saving");
}
@end