我在我的应用程序中有以下代码,我可以每次复制和粘贴,但我宁愿这样做,所以它也可以在其他领域重复使用。它允许我在屏幕上拖动UIImageViews,但我不喜欢这样一个事实:它有一点点错别字很容易出错!
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
if (touch.view == first) {
first.center = location;
if (((first.center.x >= 100) && (first.center.y >= 100) &&
(first.center.x <= 150) && (first.center.y <= 150))) {
first.center = CGPointMake(125, 125);
[first setUserInteractionEnabled:NO];
theCentre = [[NSUserDefaults standardUserDefaults] init];
NSString *centre = NSStringFromCGPoint(first.center);
[theCentre setObject:centre forKey:@"centre"];
// NSLog(@"%@", [theCentre objectForKey:@"centre"]);
[theCentre synchronize];
}
}
if (touch.view == second) {
second.center = location;
if (((second.center.x >= 150) && (second.center.y >= 150) &&
(second.center.x <= 180) && (second.center.y <= 180))) {
second.center = CGPointMake(165, 165);
[second setUserInteractionEnabled:NO];
theCentre = [[NSUserDefaults standardUserDefaults] init];
NSString *centre = NSStringFromCGPoint(second.center);
[theCentre setObject:centre forKey:@"secondCentre"];
// NSLog(@"%@", [theCentre objectForKey:@"centre"]);
[theCentre synchronize];
}
}
if (touch.view == third) {
third.center = location;
if (((third.center.x >= 200) && (third.center.y >= 200) &&
(third.center.x <= 230) && (third.center.y <= 230))) {
third.center = CGPointMake(215, 215);
[third setUserInteractionEnabled:NO];
theCentre = [[NSUserDefaults standardUserDefaults] init];
NSString *centre = NSStringFromCGPoint(third.center);
[theCentre setObject:centre forKey:@"thirdCentre"];
// NSLog(@"%@", [theCentre objectForKey:@"centre"]);
[theCentre synchronize];
}
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesBegan:touches withEvent:event];
}
我尝试过快速枚举,但是这使得一个imageView移动而其他的只是从屏幕上消失了!显然不是预期的效果......
答案 0 :(得分:2)
我建议使用UIGestureRecognizers。设置图像视图后写:
NSArray *imageViews = [NSArray arrayWithObjects:first, second, third, nil];
for (UIView *imageView in imageViews) {
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(handlePanGesture:)]
[imageView addGestureRecognizer:panGR];
[panGR release];
}
然后实现手势处理程序:
- (void)handlePanGesture:(UIGestureRecognizer *)gestureRecognizer {
UIPanGestureRecognizer *panGR = (UIPanGestureRecognizer *)gestureRecognizer;
UIView *gestureView = [panGR view];
CGPoint translation = [panGR translationInView:gestureView];
gestureView.center = CGPointMake(gestureView.center.x + translation.x,
gestureView.center.y + translation.y);
[panGR setTranslation:CGPointZero inView:gestureView];
}
此代码未经测试(用记事本编写),但这是正确的方向。