解决方案 »

  1.   

    把self.playingCardView和sender打印出来,看连接或者触发swipe方法的对象对不对
      

  2.   


    您好!我打印出来之后是这样的
    Printing description of self->_playingCardView:
    <__NSArrayI 0x8c96b80>(
    <PlayingCardView: 0x8c8a4e0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8c755a0>>,
    <PlayingCardView: 0x8c92bc0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b50>; layer = <CALayer: 0x8c7e120>>,
    <PlayingCardView: 0x8c7a2a0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96900>; layer = <CALayer: 0x8c768c0>>,
    <PlayingCardView: 0x8c8e6a0; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96a80>; layer = <CALayer: 0x8c8ac90>>,
    <PlayingCardView: 0x8c95610; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95840>; layer = <CALayer: 0x8c95720>>,
    <PlayingCardView: 0x8c93640; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ac0>; layer = <CALayer: 0x8c8bc90>>,
    <PlayingCardView: 0x8c769d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c968e0>; layer = <CALayer: 0x8c95580>>,
    <PlayingCardView: 0x8c93360; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ae0>; layer = <CALayer: 0x8c8e800>>,
    <PlayingCardView: 0x8c8a860; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96aa0>; layer = <CALayer: 0x8c8a7c0>>,
    <PlayingCardView: 0x8c7ebf0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b00>; layer = <CALayer: 0x8c8d4e0>>,
    <PlayingCardView: 0x8c95ca0; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95700>; layer = <CALayer: 0x8c95ef0>>,
    <PlayingCardView: 0x8c8cac0; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b20>; layer = <CALayer: 0x8c89a40>>
    )
    Printing description of sender:
    <UISwipeGestureRecognizer: 0x8c92c40; state = Ended; view = <PlayingCardView 0x8c92bc0>; target= <(action=swipe:, target=<ViewController 0x8c92f60>)>; direction = right>应该怎么解决呢?新手没学过debug,谢谢解答
      

  3.   

    首先你的outletcollection连接的是正确的。
    另外我看到你是把手势识别器增加到每一个view上的,这时swipe的sender是被识别的手势识别器,而不是sender,你的代码这样改就行了:
    - (IBAction)swipe:(UISwipeGestureRecognizer *)sender {  NSUInteger chooseViewIndex = [self.playingCardView indexOfObject:sender.view]; 
     [self.game chooseCardAtIndex:chooseViewIndex]; 
      

  4.   

    Printing description of self->_playingCardView:
    <__NSArrayI 0x8d9b390>(
    <PlayingCardView: 0x8d7b4f0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8d75650>>,
    <PlayingCardView: 0x8d99ad0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b360>; layer = <CALayer: 0x8d84dc0>>,
    <PlayingCardView: 0x8d871e0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1e0>; layer = <CALayer: 0x8d747a0>>,
    <PlayingCardView: 0x8d80500; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b240>; layer = <CALayer: 0x8d80570>>,
    <PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>>,
    <PlayingCardView: 0x8d7fb80; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2a0>; layer = <CALayer: 0x8d85c00>>,
    <PlayingCardView: 0x8d7b2d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1c0>; layer = <CALayer: 0x8d990d0>>,
    <PlayingCardView: 0x8d7fbf0; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2d0>; layer = <CALayer: 0x8d7fc60>>,
    <PlayingCardView: 0x8d84d30; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b270>; layer = <CALayer: 0x8d8aac0>>,
    <PlayingCardView: 0x8d853f0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b300>; layer = <CALayer: 0x8d72800>>,
    <PlayingCardView: 0x8d99850; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d992b0>; layer = <CALayer: 0x8d99aa0>>,
    <PlayingCardView: 0x8d85460; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b330>; layer = <CALayer: 0x8d81410>>
    )
    Printing description of sender->_touches:
    <__NSArrayM 0x8c82010>(
    <UITouch: 0x8d827b0> phase: Moved tap count: 1 window: <UIWindow: 0x8c83090; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x8c7fe20>; layer = <UIWindowLayer: 0x8c81d60>> view: <PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>> location in window: {214.5, 234.5} previous location in window: {182.5, 234.5} location in view: {94.5, 75.5} previous location in view: {62.5, 75.5}
    )
      

  5.   

    打印touches做什么?
    你不是要取触发手势的view吗?
      

  6.   

    刚没看收件箱
    你是说chooseViewIndex值永远为1?如果你的每个PlayingCardView上都有一个手势识别器的话,应该不可能出现这种问题,把你为PlayingCardView添加手势识别器的代码帖上来,或者直接zip你的工程,放在百度盘或者CSDN上都可以
      

  7.   

    根据2楼的打印信息,可以得出结论:
    应该使用sender.view!
    因为Sender是一个手势识别器类型的object,而self.playingCardView里面装的是view类型的object!
    indexOfObject要求类型一致,才可以返回出正确的index!
      

  8.   

    看到你的demo,你应该这样:
    把storyboard里的手势识别器去掉
    在每一个PlayingCardView初始化的时候,给它们每一个单独的手势识别器
      

  9.   

    确保你的手势添加到正确的对象上,这里指的是PlayingCardView 的实例化的对象。也只有这样,在手势的target-action 指定的方法中才能正确拿到对象,才能通过拿到的对象去outletCollection  数组中去获取当前对象的索引