は、下の画像のように、内部の大きなカスタムUIImageViewを持つUITableViewCellを持っていると仮定します。 UITableViewCellにUILongPressGestureRecOgnizer
を追加しました。私はこの動きがUITableViewCell
の境界にあることを望みます。私は今何をやったか ドラッグ可能なUIViewをSuperViewの境界に制限する
は:
UIView *view = sender.view;
CGPoint point = [sender locationInView:view.superview];
if (sender.state == UIGestureRecognizerStateChanged)
{
CGPoint oldCenter = view.center;
CGPoint newCenter = oldCenter;
CGFloat deltaX = point.x - _priorPoint.x;
CGFloat deltaY = point.y - _priorPoint.y;
newCenter.x += deltaX;
newCenter.y += deltaY;
CGRect oldFrame = view.frame;
CGRect newFrame = CGRectMake(oldFrame.origin.x + deltaX, oldFrame.origin.y+deltaY, view.width, view.height);
if (CGRectContainsRect(newFrame, self.bounds)) {
self.customImageView.center = newCenter;
}
else
{
CGFloat newX = newFrame.origin.x;
CGFloat newY = newFrame.origin.y;
if (newX<view.x) {
newX = oldFrame.origin.x;
}
else if ((newFrame.origin.x + newFrame.size.width)>view.right)
{
newX = oldFrame.origin.x;
}
if (newY<view.y) {
newY = oldFrame.origin.y;
}
else if ((newY + newFrame.size.height)>view.bottom)
{
newY = view.y;
}
NSLog(@"newX:%f, newY:%f", newX, newY);
newFrame = CGRectMake(newX, newY, view.width, view.height);
self.customImageView.frame = newFrame;
}
_priorPoint = point;
問題は、私は斜めに私の指を移動すると、画像の動きが少しぎくしゃくです。例えば、X
が範囲外の場合、Y
が有効な場合は、Y
ポイントを更新する必要があります。 ここに何が間違っていますか?何か考えていますか?
なぜ画像の内容でスクロールビューを使用しないのですか?ロングプレスレコグナイザーでスクロールを有効または無効にすることができます。同時にジェスチャー認識も許可する必要があります。 – fabe