UICamera.lastHit already gives you the result of the raycast underneath the touch / mouse. There is no need to raycast yourself.
Likewise, never use Instantiate. Use NGUITools.AddChild instead. You can pass a parent and it will parent the object correctly, and will reset the transform for you, as well as set the game object layer.