1

我尝试改编他上周在这里给我的 Travis 的示例(C4 保存图像的一部分)以将屏幕保存为 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];

...即使日志给了我

self.currentAlphabetImage:C4Image: 0x15840970; baseClass = UIControl; 
frame = (0 0; 320 568); layer = C4Layer: 0x15842590>>

...屏幕上什么都没有显示...但是,是的,画布上有些东西应该被捕获...

再说一次,我不知道怎么了。使用objectiveC的其他尝试也没有成功(例如,iOS Screenshot part of the screen

4

1 回答 1

0

我发现它需要一些解决方法。上面显示的代码在 C4Workspace 中运行良好,但是在尝试将子视图保存到图像时

  1. 需要在主视图中运行保存功能
  2. 向主视图发送通知以运行此功能
  3. 无法从该视图的设置发送通知。

所以我的代码现在看起来像这样 C4Workspace.h

#import "C4CanvasController.h"
#import "testView.h"

@interface C4WorkSpace : C4CanvasController{
    testView *test;
}
@end

C4Workspace.m

导入“C4Workspace.h”

@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

测试视图.h

#import "C4CanvasController.h"

@interface testView : C4CanvasController{
    C4Shape *shape;
}
@property (readwrite, strong) C4Image *currentAlphabetImage;
@end

测试视图.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
于 2013-10-30T07:59:21.187 回答