C4保存屏幕为C4Image

时间:2013-10-29 09:06:54

标签: ios objective-c c4

我尝试过改编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

1 个答案:

答案 0 :(得分:0)

我发现它需要一些解决方法。如上所示的代码在C4Workspace中工作正常,但在尝试将子视图保存为图像时

  1. 需要在主视图中运行保存功能
  2. 向主视图发送通知以运行此功能
  3. 无法从该视图的设置发送通知。
  4. 所以我的代码现在看起来像这样 的 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
    

    <强> 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