原理:在实际操作中以一个canvasView 作为画布,然后定义一个关于图片的数据,画在一个一一对应的NSView中,然后在canvasView最上面加一层拖拽框view 作相关拖拽,旋转操作。例子代码为伪代码,只为说明思路,并未完整实现。读者可以自行根据实际需要自行实现。
1.数据结构
图片数据
@interface ImageData : NSObject {
@property (nonatomic, assign) double rotation;
@property (nonatomic, assign) NSPoint centerPoint; // 在canvasview bounds 上显示 图片的中心点
@property (nonatomic, assign) NSSize mediaSize;a
@property (nonatomic, assign) CGImageRef p_originImageRef_;// 用于画图
@property (nonatomic, assign) CGImageRef p_showImageRef_; // 各种处理之后画图
@property (nonatomic, strong) MediaImageItemView * itemView;// 自定义类用于画图,作为canvasSuperView的subview
}
画布
先定义一个总的背景视图canvasSuperView,其他的view都作为它的子视图
@property (assign) IBOutlet NSView * canvasSuperView;
canvas视图 自定义CanvasView类,实现画背景图方法即可
@property (nonatomic, strong) CanvasView * p_canvasView;
拖拽框视图 自定义CanvasShapeView类,实现画拖拽点方法即可
@property (nonatomic, strong) CanvasShapeView * p_shapeView;
self.p_canvasView = [[CanvasView new] autorelease];
self.p_canvasView.delegate = self;
[self.canvasSuperView addSubview:self.p_canvasView positioned:NSWindowAbove relativeTo:nil];
self.p_canvasView.frame = self.canvasSuperView.bounds;
self.p_shapeView = [[CanvasShapeView new] autorelease];
self.p_shapeView.delegate = self;
[self.canvasSuperView addSubview:self.p_shapeView positioned:NSWindowAbove relativeTo:nil];
self.p_shapeView.frame = self.canvasSuperView.bounds;
下面以加入一张图片到canvasview为例
首先根据图片路径创建一个图片数据对象
ImageData * testData = [ImageData createImageDataWithPath:path];