предположим, что у нас есть UITableViewCell с внутренним большим пользовательским UIImageView, как на изображении ниже: Я добавил UILongPressGestureRecOgnizer
в UITableViewCell, поэтому после того, как пользователь longPress может переместить это большое изображение. но я хочу, чтобы это движение было в пределах 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