0

我需要制作一个启用了拖放功能的子类 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];
}
4

2 回答 2

0

您需要在该类中实现 NSCopying,这里有一个链接到另一篇关于如何做到这一点的帖子:另一个堆栈溢出帖子

在那篇文章中,您将使用的 copywithzone 方法基本上是关于如何制作班级副本的说明。

在检测用户何时触摸/拖动该图像的代码区域中,使用上述方法对其进行复制,设置其正确的框架 x 和 y 位置,然后将其作为子视图添加到持有原始对象。

//Somtheing like this
myCustomObject *object2 =[object copy];
object2.frame = cgrectmake.....
[view addSubview:object2];
于 2012-11-30T21:36:38.537 回答
0

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

于 2012-11-30T21:23:58.680 回答