app/screens/select_singer_screen.rb
class SelectSingerScreen < PM::Screen
include InitPickerView
include NormalButtonColors
include SelectSingerScreenDelegate
title '読手を選ぶ'
attr_reader :singers, :picker_view, :try_button, :player
def on_load
init_base_view
fetch_singers
set_picker_view
set_try_button
end
def will_appear
self.navigationItem.prompt = app_delegate.prompt
picker_view.selectRow(app_delegate.game_settings.singer_index,
inComponent: COMPONENT_ID,
animated: false)
end
def will_disappear
app_delegate.game_settings.singer_index = current_singer_id
app_delegate.settings_manager.save
end
def should_autorotate
false
end
def numberOfComponentsInPickerView(pickerView)
1
end
def pickerView(pickerView, numberOfRowsInComponent: component)
singers.size
end
private
def init_base_view
view.backgroundColor = :white.uicolor
end
def fetch_singers
@singers = Singer.singers
end
def set_try_button
@try_button = UIButton.alloc.init.tap do |b|
b.title = '試しに聞いてみる'
b.sizeToFit
b.frame = [
[0, picker_view.frame.size.height + 20],
[view.frame.size.width, b.frame.size.height]
]
set_button_title_color(b)
b.on(:touch){play_current_singer}
view.addSubview(b)
end
end
def play_current_singer
puts "++ #{current_singer.name}の声で読みます" if BW2.debug?
path = current_singer.path + '/001a'
@player = AudioPlayerFactory.create_player_by_path(path, ofType: 'm4a').tap do |p|
p.volume = app_delegate.reciting_settings.volume
p.delegate = self
p.prepareToPlay
end
player.play
end
def current_singer
singers[current_singer_id]
end
def current_singer_id
picker_view.selectedRowInComponent(COMPONENT_ID)
end
end