I'm currently using NGUI 2.7.0 and there is a problem with hit test for perspective UICamera
in Raycast function max ray lenght is calculated like this^
float dist = (cam.rangeDistance > 0f) ? cam.rangeDistance : currentCamera.farClipPlane - currentCamera.nearClipPlane;
But in case of perspective camera this is not correct as distance between point on near plane and corresponding point on far plane can be bigger that distance between planes( in fact it is always bigger than distance between planes except for the case of ray orthogonal to both planes )
correct value would be (if i am not mistaken)
//pseudocode
dist = (farPlane - nearPlane)/cos(max(fovX, fovY)/2);