如何限制ipad屏幕外的图像转换

时间:2011-11-02 15:53:59

标签: iphone ipad uiimage restrict uipangesturerecognizer

我目前正在使用UIPanGestureRecognizer翻译我的ipad屏幕中的图像,但问题是图像是在屏幕外。 那么我怎样才能限制ipad屏幕外的图像移动。

- (void)translate:(UIPanGestureRecognizer *)gesture {
    CGPoint myTranslation = [gesture translationInView:self];
    self.transform = CGAffineTransformTranslate(self.transform, myTranslation.x, myTranslation.y);
    [gesture setTranslation:CGPointZero inView:self];
}

2 个答案:

答案 0 :(得分:1)

您应该检查边界并确定图像的新位置是否有效。然后你可以根据那个来应用变换。

答案 1 :(得分:0)

此代码来自我的一个项目 - SSPhotoCropperViewController。在这里,我让用户在滚动视图中移动图像,但我不希望它们将图像移动到滚动视图的边界之外。我处理imageview的UIControlEventTouchDragInside事件,确定新位置,然后检查新位置是否有效,然后决定是否移动图像。这是代码片段。没有看到所有代码就很难说更多。您可以在这里使用这个想法并将其应用到您的案例中,这应该不会太困难。希望这会有所帮助。

- (BOOL) isRectanglePositionValid:(CGPoint)pos
{
    CGRect innerRect = CGRectMake((pos.x + 15), (pos.y + 15), 150, 150);
    return CGRectContainsRect(self.scrollView.frame, innerRect);
}

- (IBAction) imageMoved:(id)sender withEvent:(UIEvent *)event
{
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];

    CGPoint prev = _lastTouchDownPoint;
    _lastTouchDownPoint = point;
    CGFloat diffX = point.x - prev.x;
    CGFloat diffY = point.y - prev.y;

    UIControl *button = sender;
    CGRect newFrame = button.frame;
    newFrame.origin.x += diffX;
    newFrame.origin.y += diffY;
    if ([self isRectanglePositionValid:newFrame.origin]) {
        button.frame = newFrame;
    }
}