0

ドラッグアンドドロップが有効になっているサブクラス化された 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];
}
4

2 に答える 2

0

ユーザーがカップケーキをタップしたら、新しい UIImageView を作成し、既に画面に表示されているものからコピーします。

于 2012-11-30T21:23:58.680 に答える
0

そのクラスに NSCopying を実装する必要があります。これを行う方法に関する別の投稿へのリンクは次のとおりです:別のスタック オーバーフローの投稿

その投稿では、使用する copywithzone メソッドは、基本的にクラスのコピーを作成する方法に関する指示です。

ユーザーがその画像にタッチ/ドラッグしたことを検出するコードの領域で、上記の方法を使用してそのコピーを作成し、適切なフレームの x と y 位置を設定してから、それを保持していたビューにサブビューとして追加します。元のオブジェクト。

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