UIScrollViewのhitTestをオーバーライドしたらできそうだなと思ってやってみたらできました。
ボタンのある座標をタッチした時は、スクロールビューにヒットしなかったことにすればよいです。
Swift
1import UIKit
2
3class TouchThroughScrollView: UIScrollView {
4
5 weak var button:UIButton!
6
7 override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
8 if button != nil {
9 let buttonFrame = button!.convertRect(button!.bounds, toView: self)
10 if CGRectContainsPoint(buttonFrame, point) {
11 return nil
12 }
13 }
14 return super.hitTest(point, withEvent: event)
15 }
16}
UIScrollViewを上記のTouchThroughScrollViewに変更して、userinteractionEnabledをtrueにしてください。
ViewControllerのviewDidLoadのタイミングで、TouchThroughScrollViewのbuttonプロパティに、タップに反応させたいボタンを設定してください。