ボタンのドラッグパスを制限して、任意のポイントから画面の中央にのみドラッグできるようにするにはどうすればよいですか?
UIButtonの現在位置と中心座標がわかります。ドラッグイベントの現在のxとyの式が必要です。
ボタンのドラッグパスを制限して、任意のポイントから画面の中央にのみドラッグできるようにするにはどうすればよいですか?
UIButtonの現在位置と中心座標がわかります。ドラッグイベントの現在のxとyの式が必要です。
これでうまくいくはずです。ドラッグの開始位置を保存し、各移動イベントの現在の位置を取得します。それらをこの関数に渡します。ボタンのフレームに適用できるベクトルに応答します。
計算の要点は、ドラッグの最小成分(xまたはy)を選択し、両方の次元で同じ大きさのベクトルに応答することによって大きさを決定することです(両方の軸の符号を保持します)。
// answer a vector to apply to an object's frame, constrained to a diagonal
- (CGPoint)constrainToDiagonalFrom:(CGPoint)from to:(CGPoint)to {
CGPoint diff = CGPointMake(to.x-from.x, to.y-from.y);
CGFloat magnitude = MIN(fabs(diff.x), fabs(diff.y)); // this is how large the drag will be
return CGPointMake(copysignf(magnitude, diff.x), copysignf(magnitude, diff.y));
}
このように呼んでください:
// on touches moved
// we saved startPoint on touches began
// get location from this event's touches
CGPoint diagonal = [self constrainToDiagonalFrom:startPoint to:location];
myButton.frame = CGRectOffset(myButton.frame, diagonal.x, diagonal.y);
マグニチュードの計算をいじくり回すことができます。最大のコンポーネント、最小の、平均など。結果が両方の次元で対称である限り。
ドラッグイベントに条件を設定します。必要なポイントにドラッグした場合は、移動します。それ以外の場合は何もしません。
あなたは次のような意味ですか:
if ((oldX - newX) < oldX && (oldY - newY) < oldY) {
updatePosition(newX, newY);
}