【发布时间】:2013-05-15 11:43:48
【问题描述】:
我正在制作我的第一个应用程序,它很像纸牌游戏 - 用户必须四处移动卡片并将它们堆叠在一起。现在我对 Objective-C 很陌生,所以当我的问题很愚蠢时,我希望你能原谅我。
所以我正在尝试,我有两个 UIImageViews 和 UIPanGestureRecgonizer 附加到它们。因此,每当用户拖动其中一张卡片时,它必须位于另一张卡片的顶部。我在我的 ViewController.m 文件中使用下面的代码,但问题是当我拖动一张卡然后想拖动另一张卡时,第一张卡会弹回原来的位置,但我希望它保持原位我拖了它。当我注释掉 BringSubviewToFront 时,这不会发生,但其中一张牌总是留在另一张牌后面。
-(IBAction)dragCard:(UIPanGestureRecognizer *)recognizer {
UIView *cardView = [(UIPanGestureRecognizer *)recognizer view];
[self.view bringSubviewToFront:cardView];
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.view];}
我无法弄清楚是什么原因造成的。你能帮帮我吗...
编辑:我记录了 self.view.subviews 以显示正在发生的事情。我已经拖动带有标签 1 的图像,现在我开始拖动带有标签 2 的图像。您可以看到两个坐标都发生了变化 - 带有标签 1 的图像移回原始位置,带有标签 2 的图像也移动:
2013-05-16 17:02:20.424 (
"<UIImageView: 0x71749e0; frame = (0 0; 320 411); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7174a40>>",
"<UIImageView: 0x7172ef0; frame = (25 77; 42 58); autoresize = TM+BM; tag = 1; gestureRecognizers = <NSArray: 0x7171700>; layer = <CALayer: 0x7171620>>",
"<UIImageView: 0x71722f0; frame = (88 200; 42 58); autoresize = TM+BM; tag = 2; gestureRecognizers = <NSArray: 0x7171bc0>; layer = <CALayer: 0x7172350>>"
2013-05-16 17:02:20.441 (
"<UIImageView: 0x71749e0; frame = (0 0; 320 411); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7174a40>>",
"<UIImageView: 0x7172ef0; frame = (30 177; 42 58); autoresize = TM+BM; tag = 1; gestureRecognizers = <NSArray: 0x7171700>; layer = <CALayer: 0x7171620>>",
"<UIImageView: 0x71722f0; frame = (91 201; 42 58); autoresize = TM+BM; tag = 2; gestureRecognizers = <NSArray: 0x7171bc0>; layer = <CALayer: 0x7172350>>"
第一个 ImageView 是我的背景图片。
【问题讨论】:
-
为什么每次创建cardView的新对象。请将它声明到.h文件中并使用相同的并告诉我会发生什么
-
感谢建议,但问题依然存在
-
您是否在视图中覆盖
layoutSubviews? -
不,我没有覆盖 layoutSubviews
标签: ios uipangesturerecognizer