As far as I know, UIScrollView doesn't have width limitation since 3.0. Nevertheless, you cannot use it to display large amount of data because it would take too much time to draw it and your application will work slow.
You can use UIView of width = 320.0 * 3 instead. Handle
- (void) touchesMoved: (NSSet*)_touches withEvent: (UIEvent*)_event
And apply
view.transform = CGAffineTransformMakeTranslation(-shift, 0.f);
Shift here can be calculated depending on delta X found from touches set. Affine translation allows to emulate smooth movement. When user releases their finger (touchesEnded), redraw your view (setNeedsDisplay) with shifted content and get it back:
self.transform = CGAffineTransformIdentity;
Don't do setNeedsDisplay while touchesMoved because it can affect performance if you are drawing graphs or calculating something.
For 2D map you would have to think about both X and Y and have 320*3 X 480*3 view :)
It's interesting task. Enjoy.