可拖动的UIImageViews副本

时间:2012-11-30 21:03:23

标签: ios objective-c drag-and-drop uiimageview

我需要制作一个已启用拖放的子类UIImageView的精确副本,所以我可以拖动它但留下一个副本来替换它或者只是制作一个副本,我可以拖到另一个地方而不是第一个地方。

一些截图解释:

在拖动之前

拖动:

正如你所看到的,我想把杯形蛋糕放在适当的位置,这样我就可以继续拖动它了。


没关系......我想通了!怎么样?我在de subclassed UIImageView中创建了另一个实例,复制了每个属性(UIImage,delegate,frame)将它添加到同一个superview并使用协议将它传递给UIView我需要它...

解决方案:

代码:

#import <UIKit/UIKit.h>
#import "DragAndDrop.h"

@interface DraggableImageView : UIImageView

@property (weak, nonatomic) id <DragAndDrop> delegate;

@property CGPoint startLocation;
@property (strong, nonatomic) DraggableImageView *copied;

@end

#import "DraggableImageView.h"

@implementation DraggableImageView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    self.copied = [[DraggableImageView alloc] initWithImage:[self image]];

    [self.copied setDelegate:[self delegate]];
    [self.copied setFrame:[self frame]];

    [[self superview] addSubview:self.copied];

    CGPoint pt = [[touches anyObject] locationInView:self.copied];

    self.copied.startLocation = pt;

    [[self.copied superview] bringSubviewToFront:self.copied];
}

2 个答案:

答案 0 :(得分:0)

当用户点击蛋糕时,只需创建一个新的UIImageView,然后从已经在屏幕上的那个上复制它。

答案 1 :(得分:0)

您需要在该课程中实施NSCopying,以下是指向其他帖子的链接:another stack overflow post

在该帖子中,您将使用的copywithzone方法基本上是如何制作课程副本的说明。

在代码区域中检测用户触摸/拖动该图像的时间,使用上述方法复制它,设置其正确的x和y位置,然后将其作为子视图添加到视图中抱着原始物体。

//Somtheing like this
myCustomObject *object2 =[object copy];
object2.frame = cgrectmake.....
[view addSubview:object2];