ドラッグアンドドロップが有効になっているサブクラス化された UIImageView の正確なコピーを作成する必要があるため、ドラッグしてコピーを残して置き換えるか、最初の場所ではなく別の場所にドラッグできるコピーを作成するだけです。
説明するスクリーンショット:
ドラッグ前
ドラッグ:
ご覧のとおり、カップケーキをそのまま残して、そこから複数のコピーをドラッグし続けることができるようにします。
気にしないで…わかった!どのように?サブクラス化されたUIImageView内に別のインスタンスを作成し、すべてのプロパティ(UIImage、デリゲート、フレーム)をコピーして同じスーパービューに追加し、プロトコルを使用してそれを必要とする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];
}