UICollectionViewに含まれる他のいくつかのUIViewの1つにドラッグアンドドロップしたい、いくつかのサブビューを含むUIViewサブクラスがあります。ドラッグが開始されたら、ドラッグされたビューを現在のサイズからドラッグ中に小さいサイズにスケーリングしたいと思います (元のビューは大きすぎて、最初に縮小せずにドロップ ターゲットを簡単に選択できません)。私はこれを持っています:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.superview bringSubviewToFront:self];
self.transform = CGAffineTransformMakeScale(0.3f, 0.3f);
startLocation = ([[touches anyObject] locationInView:self]);
startLocation = CGPointApplyAffineTransform(startLocation, self.transform);
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint pt = [[touches anyObject] locationInView:self];
float dx = pt.x - startLocation.x;
float dy = pt.y - startLocation.y;
CGPoint newCenter = CGPointApplyAffineTransform (CGPointMake(self.center.x + dx, self.center.y + dy), self.transform);
self.center = newCenter;
}
これは、ドラッグされた UIView を希望どおりにスケーリングし、ドラッグできるようにするための開始です。ただし、ドラッグされた UIView はマウス ポインターで直接移動しません (私はシミュレーターで実行しています)。画像がシミュレーター画面の左上隅近くにある場合、マウス ポインターとドラッグされたビューが一緒になります。しかし、画面の右上隅から離れると、ビューはマウス ポインターと一緒に直接移動しなくなります。マウス ポインターは、ドラッグされた UIView の動きに対して約 2:1 の比率で移動するように見えます。
二次的な問題は、ドラッグが終了したときにアイテムがドロップされていない場合、UIView をスーパービューに再アタッチする前に元のスケールに戻す必要があり、その方法がよくわからないことです。
ここで完全に軌道から外れている場合は、より良いアプローチに関する提案など、どんな助けにも感謝します。(ドロップターゲットを分離してドロップするために他にやるべきことがあることは知っていますが、そこで何をする必要があるかはわかっていると思います)。
ご指導ありがとうございます。
正規表現