C4 сохранить экран как C4Image

Я попытался адаптировать пример Трэвиса, который он дал мне здесь на прошлой неделе ( 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)

1 ответ

Что я обнаружил, так это то, что нужно немного обойти. Код, как показано выше, прекрасно работает в 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

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
Другие вопросы по тегам