나는 다른 기술, pan gestures으로 이것을 대답 할 것이다. 나는 당신의 기술을 사용하지 않는, 그래서 그것을 말할 수는 없지만, 나는 다음과 같은 모든 시간을 사용
- (void)handlePanImage:(UIPanGestureRecognizer *)sender
{
static CGPoint originalCenter;
static UIImageView *imageview;
if (sender.state == UIGestureRecognizerStateBegan)
{
UIImageView *selectedImageView = (UIImageView *) sender.view;
imageview = [[UIImageView alloc] initWithFrame:selectedImageView.frame];
imageview.image = selectedImageView.image;
imageview.alpha = 0.8;
[sender.view.superview addSubview:imageview];
originalCenter = imageview.center;
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
CGPoint translation = [sender translationInView:sender.view.superview];
imageview.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);
}
else if (sender.state == UIGestureRecognizerStateEnded)
{
[imageview removeFromSuperview];
imageview = nil;
CGPoint translation = [sender translationInView:sender.view.superview];
// do whatever you want to at the end, in this case, animating the moving
// of the old image to the new location. perhaps you don't want to move your
// old image, but leave it there, maybe you just want to change the alpha of
// what you dragged back to 1.0 and snap it into place. Just do whatever you
// want here. Note, in this latter scenario, if you want to be able to drag
// the new image back out, you'll have to create a new pan gesture recognizer
// for it.
[UIView animateWithDuration:0.2
animations:^{
sender.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);;
}];
}
else if (sender.state == UIGestureRecognizerStateCancelled || sender.state == UIGestureRecognizerStateFailed)
{
[imageview removeFromSuperview];
imageview = nil;
}
}
당신도 할 수 있습니다 내가 핸들러가 다음
UIPanGestureRecognizer *pan;
pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanImage:)];
image01.userInteractionEnabled = YES;
[self.image01 addGestureRecognizer:pan];
pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanImage:)];
image02.userInteractionEnabled = YES;
[self.image02 addGestureRecognizer:pan];
과 각 이미지에 대해 새로운 제스처 인식기를 생성하는 대신 상위 뷰에 하나씩 이미지를 만들고 이미지를 감지 한 다음 계속 수행하십시오. 다음
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanSuperView:)];
[self.view addGestureRecognizer:pan];
: 그리고 그처럼 보일 수 있습니다 그것은 멋지다
- (void)handlePanSuperView:(UIPanGestureRecognizer *)sender
{
static CGPoint originalCenter;
static UIImageView *selectedImageView = nil;
static UIImageView *draggedImageView = nil;
if (sender.state == UIGestureRecognizerStateBegan)
{
selectedImageView = nil;
CGPoint location = [sender locationInView:sender.view];
for (UIImageView *imageview in _imageviews)
{
if (CGRectContainsPoint(imageview.frame, location))
selectedImageView = imageview;
}
if (selectedImageView)
{
draggedImageView = [[UIImageView alloc] initWithFrame:selectedImageView.frame];
draggedImageView.image = selectedImageView.image;
draggedImageView.alpha = 0.8;
[sender.view addSubview:draggedImageView];
originalCenter = selectedImageView.center;
}
}
else if (sender.state == UIGestureRecognizerStateChanged && selectedImageView)
{
CGPoint translation = [sender translationInView:sender.view];
draggedImageView.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);
}
else if (sender.state == UIGestureRecognizerStateEnded && selectedImageView)
{
[draggedImageView removeFromSuperview];
draggedImageView = nil;
CGPoint translation = [sender translationInView:sender.view];
// do whatever you want to at the end, in this case, animating the moving of the old image
[UIView animateWithDuration:0.2
animations:^{
selectedImageView.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);;
}];
}
else if ((sender.state == UIGestureRecognizerStateCancelled || sender.state == UIGestureRecognizerStateFailed) && selectedImageView)
{
[draggedImageView removeFromSuperview];
draggedImageView = nil;
}
}
출처
2012-07-20 22:05:13
Rob
내가 월요일에 일을 얻을 때, 나는 그에게 기회를 줄 것이다. 감사 – nick