iphone :: touchesMoved:在UIView中移动UIImageView?

时间:2011-07-18 17:05:01

标签: uiview uiimageview drag

这是我的代码:

- (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变量。

1 个答案:

答案 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位置类似。