From 32d005dc0b27128cb3a26c73a5b08e35f41f85c0 Mon Sep 17 00:00:00 2001 From: Ben Cunningham Date: Mon, 27 Oct 2014 16:53:44 -0700 Subject: [PATCH] Add point parameter to ASTextNode delegate methods Outfit ASTextNodeDelegate shouldHighlight and shouldLongPress methods with a point parameter that describes the location of the relevant touch. --- AsyncDisplayKit/ASTextNode.h | 6 ++++-- AsyncDisplayKit/ASTextNode.mm | 11 +++++++---- AsyncDisplayKitTests/ASTextNodeTests.m | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/AsyncDisplayKit/ASTextNode.h b/AsyncDisplayKit/ASTextNode.h index dd83546e..371cc33f 100644 --- a/AsyncDisplayKit/ASTextNode.h +++ b/AsyncDisplayKit/ASTextNode.h @@ -204,19 +204,21 @@ typedef NS_ENUM(NSUInteger, ASTextNodeHighlightStyle) { @param textNode The text node containing the entity attribute. @param attribute The attribute that was tapped. Will not be nil. @param value The value of the tapped attribute. + @param point The point within textNode, in textNode's coordinate system, that was touched to trigger a highlight. @discussion If not implemented, the default value is NO. @return YES if the entity attribute should be a link, NO otherwise. */ -- (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value; +- (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point; /** @abstract Indicates to the text node if an attribute is a valid long-press target @param textNode The text node containing the entity attribute. @param attribute The attribute that was tapped. Will not be nil. @param value The value of the tapped attribute. + @param point The point within textNode, in textNode's coordinate system, that was long-pressed. @discussion If not implemented, the default value is NO. @return YES if the entity attribute should be treated as a long-press target, NO otherwise. */ -- (BOOL)textNode:(ASTextNode *)textNode shouldLongPressLinkAttribute:(NSString *)attribute value:(id)value; +- (BOOL)textNode:(ASTextNode *)textNode shouldLongPressLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point; @end diff --git a/AsyncDisplayKit/ASTextNode.mm b/AsyncDisplayKit/ASTextNode.mm index 4cbc6842..4f2f0083 100644 --- a/AsyncDisplayKit/ASTextNode.mm +++ b/AsyncDisplayKit/ASTextNode.mm @@ -418,8 +418,8 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f) // Check if delegate implements optional method, if not assume NO. // Should the text be highlightable/touchable? - if (![_delegate respondsToSelector:@selector(textNode:shouldHighlightLinkAttribute:value:)] || - ![_delegate textNode:self shouldHighlightLinkAttribute:name value:value]) { + if (![_delegate respondsToSelector:@selector(textNode:shouldHighlightLinkAttribute:value:atPoint:)] || + ![_delegate textNode:self shouldHighlightLinkAttribute:name value:value atPoint:point]) { value = nil; name = nil; } @@ -465,8 +465,11 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f) } // Ask our delegate if a long-press on an attribute is relevant - if ([self.delegate respondsToSelector:@selector(textNode:shouldLongPressLinkAttribute:value:)]) { - return [self.delegate textNode:self shouldLongPressLinkAttribute:_highlightedLinkAttributeName value:_highlightedLinkAttributeValue]; + if ([self.delegate respondsToSelector:@selector(textNode:shouldLongPressLinkAttribute:value:atPoint:)]) { + return [self.delegate textNode:self + shouldLongPressLinkAttribute:_highlightedLinkAttributeName + value:_highlightedLinkAttributeValue + atPoint:[gestureRecognizer locationInView:self.view]]; } // Otherwise we are good to go. diff --git a/AsyncDisplayKitTests/ASTextNodeTests.m b/AsyncDisplayKitTests/ASTextNodeTests.m index f5a34a6a..6ea99d79 100644 --- a/AsyncDisplayKitTests/ASTextNodeTests.m +++ b/AsyncDisplayKitTests/ASTextNodeTests.m @@ -30,7 +30,7 @@ _tappedLinkValue = value; } -- (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value +- (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point { return YES; }