Minor nitpick: This could be more elegantly written as
if (touchPassThrough && (hitview == self))
{
    return nil;
}
return hitView;