Skip to content

Instantly share code, notes, and snippets.

@sdrew
Created August 23, 2011 00:40

Revisions

  1. @schwa schwa created this gist Aug 22, 2011.
    36 changes: 36 additions & 0 deletions gistfile1.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    #import "CALayer_HitTestExtensions.h"

    #import <objc/runtime.h>

    static void *kHitMask;

    @implementation CALayer (CALayer_HitTestExtensions)

    - (NSUInteger)hitMask
    {
    return([objc_getAssociatedObject(self, &kHitMask) unsignedIntegerValue]);
    }

    - (void)setHitMask:(NSUInteger)inHitMask
    {
    objc_setAssociatedObject(self, &kHitMask, [NSNumber numberWithUnsignedInteger:inHitMask], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }

    - (CALayer *)hitTest:(CGPoint)inPoint mask:(NSUInteger)inMask;
    {
    CALayer *theLayer = [self hitTest:inPoint];

    while (theLayer != NULL && theLayer != self)
    {
    if (inMask & theLayer.hitMask)
    {
    return(theLayer);
    }

    theLayer = [theLayer superlayer];
    }

    return(NULL);
    }

    @end