It has nothing to do with orientation. According to apple docs, "hitTest Returns the farthest descendant of the layer". Siblings are searched in top-to-bottom order. the touch point is in the coordinate system of the receiver's superlayer. So add this line immediately after you get the touchPoint. i.e
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
touchPoint = [self.view.layer convertPoint:touchPoint toLayer:self.view.layer.superlayer];
...........