Classes/MyViewController.m
/* |
Copyright (C) 2015 Apple Inc. All Rights Reserved. |
See LICENSE.txt for this sample’s licensing information |
Abstract: |
The main view controller of this app |
*/ |
#import "MyViewController.h" |
#define kTransitionDuration 0.75 |
@implementation MyViewController |
@synthesize instructionsView, webView, contentView, flipButton, doneButton, startButton, bus0Switch, bus0VolumeSlider, bus1Switch, bus1VolumeSlider, outputVolumeSlider, mixerController; |
#pragma mark- UIView |
- (void)viewDidLoad |
{ |
[super viewDidLoad]; |
// load up the info text |
NSString *infoSouceFile = [[NSBundle mainBundle] pathForResource:@"info" ofType:@"html"]; |
NSString *infoText = [NSString stringWithContentsOfFile:infoSouceFile encoding:NSUTF8StringEncoding error:nil]; |
[self.webView loadHTMLString:infoText baseURL:nil]; |
// add the subview |
[self.view addSubview:contentView]; |
// add our custom flip buttons as the nav bars custom right view |
UIButton* infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; |
[infoButton addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside]; |
flipButton = [[UIBarButtonItem alloc] initWithCustomView:infoButton]; |
self.navigationItem.rightBarButtonItem = flipButton; |
// create our done button as the nav bar's custom right view for the flipped view (used later) |
doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(flipAction:)]; |
} |
- (void)didReceiveMemoryWarning |
{ |
// invoke super's implementation to do the Right Thing. In practice this is unlikely to be used in this application, |
// and it would be of little benefit, but the principle is the important thing. |
[super didReceiveMemoryWarning]; |
} |
- (void)dealloc |
{ |
[instructionsView release]; |
[webView release]; |
[contentView release]; |
self.flipButton = nil; |
self.doneButton = nil; |
[startButton release]; |
[bus0Switch release]; |
[bus0VolumeSlider release]; |
[bus1Switch release]; |
[bus1VolumeSlider release]; |
[outputVolumeSlider release]; |
[mixerController release]; |
[super dealloc]; |
} |
#pragma mark- |
// set the mixers values according to the UI state |
- (void)setUIDefaults |
{ |
[mixerController enableInput:0 isOn:bus0Switch.isOn]; |
[mixerController enableInput:1 isOn:bus1Switch.isOn]; |
[mixerController setInputVolume:0 value:bus0VolumeSlider.value]; |
[mixerController setInputVolume:1 value:bus1VolumeSlider.value]; |
[mixerController setOutputVolume:outputVolumeSlider.value]; |
} |
// do the info button flip |
- (void)flipAction:(id)sender |
{ |
[UIView setAnimationDelegate:self]; |
[UIView setAnimationDidStopSelector:@selector(animationDidStop:animationIDfinished:finished:context:)]; |
[UIView beginAnimations:nil context:nil]; |
[UIView setAnimationDuration:kTransitionDuration]; |
[UIView setAnimationTransition:([self.contentView superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromRight) |
forView:self.view |
cache:YES]; |
if ([self.instructionsView superview]) { |
[self.instructionsView removeFromSuperview]; |
[self.view addSubview:contentView]; |
} else { |
[self.contentView removeFromSuperview]; |
[self.view addSubview:instructionsView]; |
} |
[UIView commitAnimations]; |
// adjust our done/info buttons accordingly |
if ([instructionsView superview]) { |
self.navigationItem.rightBarButtonItem = doneButton; |
} else { |
self.navigationItem.rightBarButtonItem = flipButton; |
} |
} |
// called if we've been interrupted and if we're playing, stop |
- (void)stopForInterruption |
{ |
if (mixerController.isPlaying) { |
[mixerController stopAUGraph]; |
self.startButton.selected = NO; |
} |
} |
#pragma mark- Actions |
// handle input on/off switch action |
- (IBAction)enableInput:(UISwitch *)sender |
{ |
UInt32 inputNum = (UInt32)[sender tag]; |
AudioUnitParameterValue isOn = (AudioUnitParameterValue)sender.isOn; |
if (0 == inputNum) self.bus0VolumeSlider.enabled = isOn; |
if (1 == inputNum) self.bus1VolumeSlider.enabled = isOn; |
[mixerController enableInput:inputNum isOn:isOn]; |
} |
// handle input volume changes |
- (IBAction)setInputVolume:(UISlider *)sender |
{ |
UInt32 inputNum = (UInt32)[sender tag]; |
AudioUnitParameterValue value = sender.value; |
[mixerController setInputVolume:inputNum value:value]; |
} |
// handle output volume changes |
- (IBAction)setOutputVolume:(UISlider *)sender |
{ |
AudioUnitParameterValue value = sender.value; |
[mixerController setOutputVolume:value]; |
} |
// handle the button press |
- (IBAction)doSomethingAction:(id)sender |
{ |
if (mixerController.isPlaying) { |
[mixerController stopAUGraph]; |
self.startButton.selected = NO; |
} else { |
[mixerController startAUGraph]; |
self.startButton.selected = YES; |
} |
} |
@end |
Copyright © 2015 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2015-06-19