在移动的方向移动uiview,iphone

时间:2011-11-24 09:02:54

标签: ios ios4

我想将UIView与触摸移动方向相同。

请建议。

3 个答案:

答案 0 :(得分:2)

将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 :(得分:1)

尝试像下面的代码一样。我不确定它是否是所有方向翻译的最佳解决方案。

- (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代替。 :)

答案 2 :(得分:0)

您可以将此方法添加到子类 UIView 类中。

- (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);
}