此代码来自我的一个项目 - SSPhotoCropperViewController。在这里,我让用户在滚动视图中移动图像,但我不希望他们将图像移动到滚动视图的范围之外。我处理图像视图的 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;
}
}