我正在开发一个应用程序,允许用户在某个点上拖放10个图像。所以有10个图像,如果他/她将一个图像拖到另一个图像上,这两个图像就会被交换。
截图如下:
因此,当用户拖动一张照片时,我希望它减少其不透明度,并为用户提供一个可拖动的图像,如果他将图像放在任何图像之外,它会再次消失。
我开发的方式如下。我为这些UIPanGesture
设置了UIImageView
:
for (UIImageView *imgView in editPhotosView.subviews) {
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(photoDragged:)];
[imgView addGestureRecognizer:panGesture];
imgView.userInteractionEnabled = YES;
[panGesture release];
}
然后我的photoDragged:
方法:
- (void)photoDragged:(UIPanGestureRecognizer *)gesture {
UIView *view = gesture.view;
if ([view isKindOfClass:[UIImageView class]]) {
UIImageView *imgView = (UIImageView *)view;
if (gesture.state == UIGestureRecognizerStateBegan) {
imgView.alpha = 0.5;
UIImageView *newView = [[UIImageView alloc] initWithFrame:imgView.frame];
newView.image = imgView.image;
newView.tag = imgView.tag;
newView.backgroundColor = imgView.backgroundColor;
newView.gestureRecognizers = imgView.gestureRecognizers;
[editPhotosView addSubview:newView];
[newView release];
}
else if (gesture.state == UIGestureRecognizerStateChanged) {
CGPoint translation = [gesture translationInView:view.superview];
[view setCenter:CGPointMake(view.center.x + translation.x, view.center.y + translation.y)];
[gesture setTranslation:CGPointZero inView:view.superview];
}
else { ... }
}
}
因此,当您看到我在用户开始拖动它时,在与原始图像相同的位置添加一个具有0.5不透明度的新UIImageView
。因此,用户正在拖动原始图像。但我想要做的是在用户拖动图像时复制原始图像并创建“可拖动”图像并将其传递给用户进行拖动。
但要做到这一点,我必须将用户触摸传递给新创建的“draggable”UIImageView。虽然它实际上设置为原始图像(用户在开始拖动时触摸的图像)。
所以我的问题是:如何将用户的触摸传递给另一个元素?。
我希望这是有道理的。谢谢你的帮助!
答案 0 :(得分:0)
好吧,您可以通过在其他对象中创建一个将手势识别器作为参数的方法,将UIPanGestureRecognizer对象传递给另一个对象。
- (void)myMethod:(UIPanGestureRecognizer *)gesture
{
// Do stuff
}
使用....从你当前的手势识别器调用....
[myOtherObject myMethod:gesture];
不完全确定我在这里完全理解你的问题。 : - /
答案 1 :(得分:0)
也许:
[otherObject sendActionsForControlEvents:UIControlEventTouchUpInside];
或任何其他UIControlEvent
答案 2 :(得分:0)
最后我决定拖动原始图像并在原始位置留下副本。
我通过重新创建手势识别器并将它们分配给“副本”解决了问题,就像PragmaOnce建议的那样。