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, но при попытке сохранить подпредставление в изображение
- необходимо запустить функцию сохранения на главном экране
- отправляет уведомление на основной вид для запуска этой функции
- уведомление не может быть отправлено из настройки этого представления.
Так что код для меня теперь выглядит как этот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