my app consists of deck of cards. cards in deck made in draggableview. i'm trying make double tap on screen make buttons on card disappear/reappear. after reading post, tried give shot. put uitapgesture initwithframe method in draggableview class, so:
- (id)initwithframe:(cgrect)frame self = [super initwithframe:frame]; if (self) { [self addsubviewfromnib]; [self setupview]; pangesturerecognizer = [[uipangesturerecognizer alloc]initwithtarget:self action:@selector(beingdragged:)]; cardwidth = frame.size.width; cardheight = frame.size.height; type = 0; pangesturerecognizer.delegate = self; pangesturerecognizer.cancelstouchesinview = no; _backgroundscrollview.pangesturerecognizer.cancelstouchesinview = no; //...more code above.... _backgroundscrollview.userinteractionenabled = yes; tapgesturerecognizer = [[uitapgesturerecognizer alloc] initwithtarget:_backgroundscrollview action:@selector(doubletap)]; tapgesturerecognizer.delegate = _backgroundscrollview; tapgesturerecognizer.numberoftapsrequired = 2; [_backgroundscrollview addgesturerecognizer:tapgesturerecognizer]; [self addgesturerecognizer:pangesturerecognizer]; } - (void) doubletap: (uitapgesturerecognizer *)tapgesturerecognizer{ _mapbutton.hidden = !_mapbutton.hidden; _menubutton.hidden = !_menubutton.hidden; _phonebutton.hidden = !_phonebutton.hidden; reviewbutton.hidden = !reviewbutton.hidden; _sharebutton.hidden = !_sharebutton.hidden; } - (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldberequiredtofailbygesturerecognizer:(uigesturerecognizer *)othergesturerecognizer { // if gesture recognizer uitapgesturerecongizer, other // gesture detected uipangesturerecognizer, require // uitapgesturerecognizer fail. if ([gesturerecognizer iskindofclass:[uitapgesturerecognizer class]] && [othergesturerecognizer iskindofclass:[uipangesturerecognizer class]]) { return yes; } else { return no; } } - (bool)gesturerecognizershouldbegin:(uigesturerecognizer *)gesturerecognizer { if ([gesturerecognizer iskindofclass:[uitapgesturerecognizer class]]) { return yes; } if ([gesturerecognizer iskindofclass:[uipangesturerecognizer class]]) { uipangesturerecognizer *pangesture = (uipangesturerecognizer *)gesturerecognizer; cgpoint velocity = [pangesture velocityinview:self]; return fabs(velocity.y) <= fabs(velocity.x); } return yes; }
however, if double tap, sib abrt error:
-[uitapgesturerecognizer velocityinview:]: unrecognized selector sent instance 0x7f9f9a244230 *** terminating app due uncaught exception 'nsinvalidargumentexception', reason: '-[uitapgesturerecognizer velocityinview:]: unrecognized selector sent instance 0x7f9f9a244230'
i'm assuming means there's error between pangesturerecognizer , tapgesture recognizer. how resolve it?
edit: still unresolved, if change tapgesture added draggable view(thus, self), rather _backgroundscrollview, error:
terminating app due uncaught exception 'nsinvalidargumentexception', reason: '-[draggableview doubletap]: unrecognized selector sent instance 0x7fefdd9e4f70'
other edit: changed backgroundscrollview, , error:
[uiscrollview doubletap]: unrecognized selector sent instance 0x7fe5130af000
gesturerecognizershouldbegin
called, whenver gesture recogniser procss touches, either tap gesture or either pan gesture. need check gesturerecogniser type , proceed further.
implement following method(taken here) allow simultaneous gestures recognised:
- (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldberequiredtofailbygesturerecognizer:(uigesturerecognizer *)othergesturerecognizer { // if gesture recognizer uitapgesturerecongizer, other // gesture detected uipangesturerecognizer, require // uipangesturerecognizer fail. if ([gesturerecognizer iskindofclass:[uitapgesturerecognizer class]] && [othergesturerecognizer iskindofclass:[uipangesturerecognizer class]]) { return yes; } else { return no; } }
and in other delegate method, crash reason tells that:
-[uitapgesturerecognizer velocityinview:]: unrecognized selector sent instance 0x7f9f9a2
velocityinview
being called on wrong gesture type, avoid these kind of errors, modify delegate method below:
- (bool)gesturerecognizershouldbegin:(uigesturerecognizer *)gesturerecognizer { if ([gesturerecognizer iskindofclass:[uitapgesturerecognizer class]]) { return yes; } if ([gesturerecognizer iskindofclass:[uipangesturerecognizer class]]) { uipangesturerecogniser *pangesture = (uipangesturerecongiser *)gesturerecogniser; cgpoint velocity = [pangesture velocityinview:self]; return fabs(velocity.y) <= fabs(velocity.x); } return yes; }
Comments
Post a Comment