Перевести uiview в направлении касания переехал, iphone - PullRequest
2 голосов
/ 24 ноября 2011

Я хочу перевести UIView в том же направлении, что и касание.

Пожалуйста, предложите.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Измените методы touchesBegan и touchesMoved так, чтобы они выглядели следующим образом

float oldX, oldY;
BOOL dragging;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if (CGRectContainsPoint(window.frame, touchLocation)) {

        dragging = YES;
        oldX = touchLocation.x;
        oldY = touchLocation.y;
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if (dragging) {

        CGRect frame = window.frame;
        frame.origin.x = window.frame.origin.x + touchLocation.x - oldX;
        frame.origin.y =  window.frame.origin.y + touchLocation.y - oldY;
        window.frame = frame;
    }

    oldX = touchLocation.x;
    oldY = touchLocation.y;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    dragging = NO;
}

Надеюсь, это поможет

1 голос
/ 24 ноября 2011

Попробуйте сделать как код ниже.Я не уверен, что это лучшее решение для всех направлений перевода.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  if ([touches count] != 1) return;

  _swipeStartInX = [[touches anyObject] locationInView:self].x;
  _swipeStartInY = [[touches anyObject] locationInView:self].y;
  _swiping = YES;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
  if (!_swiping || [touches count] != 1) return;

  CGFloat swipeDistanceInX = [[touches anyObject] locationInView:self].x - _swipeStartInX;
  CGFloat swipeDistanceInY = [[touches anyObject] locationInView:self].y - _swipeStartInY;
  CGSize contentSize = self.frame.size;

  [_yourView setFrame:CGRectMake(swipeDistanceInX - contentSize.width, swipeDistanceInY - contentSize.width, contentSize.width, contentSize.height)];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  if (!_swiping) return;

  // You can set the last position when touches end.
  // E.g. You can set positions like slide page does, just the the origin of _yourView.
}

Если вы просто хотите перевести в вертикальном и горизонтальном направлении, вы можете использовать UIScrolView:)

0 голосов
/ 28 марта 2013

Вы можете просто добавить этот метод в свой подкласс UIView class.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    UITouch *touch = [touches anyObject];

    CGPoint currentLocation = [touch locationInView:self];
    CGPoint previousLocation= [touch previousLocationInView:self];
    CGFloat deltaX = currentLocation.x - previousLocation.x;
    CGFloat deltaY = currentLocation.y - previousLocation.y;

    self.frame = CGRectMake(self.frame.origin.x + deltaX, self.frame.origin.y + deltaY, self.frame.size.width, self.frame.size.height);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...