如何才能拖动UIImageView但只能在屏幕的某个区域内?我的代码目前看起来像这样:
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
touch.view.frame = CGRectMake(104, 171, 113, 49);
if([touch view] == toggle)
{
CGPoint location = [touch locationInView:self.view];
CGPoint newLocation = CGPointMake(toggle.center.x, location.y);
toggle.center = newLocation;
NSLog(@"%f \n",toggle.center.y);
}
}
我希望能够仅在我定义的帧内拖动图像。
答案 0 :(得分:1)
您可以使用CGRectContainsRect(rect1, rect2)
检查第一个矩形是否完全位于第二个
bool CGRectContainsRect (
CGRect rect1,
CGRect rect2
);
当您使用UIViews并想要查看一个视图是否完全落在一秒钟的帧内时,相关函数CGRectContainsRect将为您进行检查。这不会检查交叉点;两个矩形的并集必须等于第一个矩形才能返回true。该函数有两个参数。第一个矩形始终是周围的项目。第二个参数要么完全落在第一个参数内,要么没有。
所以你的代码可能是这样的
CGPoint location = [touch locationInView:self.view];
CGPoint newLocation = CGPointMake(toggle.center.x, location.y);
CGRect r = CGRectMake(newLocation.x-self.frame.size.width/2,
newLocation.y-self.frame.size.height/2,
self.frame.size.width,
self.frame.size.height);
if(CGRectContainsRect(r, theOtherRect)){
toggle.center = newLocation;
NSLog(@"%f \n",toggle.center.y);
}
其他有用的CoreGraphics函数:http://blogs.oreilly.com/iphone/2008/12/useful-core-graphics-functions.html
另一个提示:NSLog(@"%@", NSStringFromCGPoint(toggle.center))
使CGTypes的记录更容易。等效使用:NSStringFromCGRect(rect)
答案 1 :(得分:0)
if (newLocation.y > NSMaxY(touch.view.frame)) newLocation.y = NSMaxY(touch.view.frame);
if (newLocation.y < NSMinY(touch.view.frame)) newLocation.y = NSMinY(touch.view.frame);
toggle.center = newLocation;
如果您愿意,可以对x坐标执行相同的操作。