这是我的代码:
- (void) touchesBegan: (NSSet *)touches withEvent: (UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self.view];
startLocation = pt;
[super touchesBegan: touches withEvent: event];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self.view];
CGRect frame = [self.view frame];
frame.origin.x += pt.x - startLocation.x;
frame.origin.y += pt.y - startLocation.y;
[self.view setFrame:frame];
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *v = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 100, 100)];
v.backgroundColor = [UIColor redColor];
UIImageView *imv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"boo2.png"]];
imv.frame = CGRectMake(0, 0, 50, 50);
[v addSubview:imv];
[self.view addSubview: v];
[v release];
UIView *v2 = [[UIView alloc] initWithFrame: CGRectMake(100, 100, 100, 100)];
v2.backgroundColor = [UIColor blueColor];
UIImageView *imv2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"boo2.png"]];
imv2.frame = CGRectMake(0, 0, 50, 50);
[v2 addSubview:imv2];
[self.view addSubview: v2];
[v2 release];
}
我想要做的是在UIView中移动UIImageView,而不是整个视图。但是,上面的代码,当我尝试拖动时,它会移动整个视图。
注意:图像是从其他函数返回的,未在viewdidload中声明。假设您无法声明UIImageView变量。
答案 0 :(得分:1)
我不太确定你要做什么。而且我不知道为什么你把每个UIImageView's
都放在UIView
里面,你放入了视图控制器的视图中。您也可以直接将UIImageView's
添加为视图控制器视图的子视图。
尽管如此,从我能看出的情况来看,用户必须能够在屏幕上拖动图像。
如果是这种情况,我建议您将UIImageView's
中的每一个存储在一个数组中。然后,在touchesBegan:withEvent:
中,您必须确定要触摸的UIImageView
。在代码中获取代表主视图中位置的CGPoint
是一个好的开始。如果您将UIImageView's
直接添加为主视图的子视图,则可以将此CGPoint
的坐标与这些UIImageView's
的帧进行比较,以确定正在按下哪一个。UIImageView
。
然后,要允许拖动,您需要在触摸开始时保存UIImageView
的坐标。然后,每次触摸移动时,您都可以计算newImageViewX = imageViewStartX + (newTouchX - touchStartX);
的新x位置作为原始x位置,加上移动的距离。也就是说,
{{1}}
和y位置类似。