I solved my problem with the ugliest code I've ever written. I didn't want to change code in NGUI because it would be overwritten when we update, and because UISlider:OnDragBackground() is not virtual, that meant I had to copy and rename that whole class to override the one function. This allowed me to implement it so that it passes on the value if it is more vertical than horizontal:
protected void OnDragBackground (GameObject go, Vector2 delta)
{
if (UICamera.currentScheme == UICamera.ControlScheme.Controller) return;
mCam = UICamera.currentCamera;
if ( Math.Abs(delta.y) > Math.Abs(delta.x) ) {
parentScroller.currentMomentum = new Vector3(0.0f, delta.y*0.003f, 0.0f);
return;
}
value = ScreenToValue(UICamera.lastTouchPosition);
}
parentScroller is a UIScrollView. It works, but it's a really ugly solution.