AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
[_window release];
RootViewController *rootVC = [[RootViewController alloc] init];
self.window.rootViewController = rootVC;
[rootVC release];
return YES;
}
RootViewController.h
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, NSBackGround) {
NSRed,
NSGreen,
NSBlue,
};
@interface RootViewController : UIViewController
@end
RootViewController.m
#import "RootViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface RootViewController ()
@property(nonatomic, retain)UIStepper *stepper;
@property(nonatomic, retain)UIImageView *imageView;
@property(nonatomic, retain)AVAudioPlayer *player;
@property(nonatomic, retain)UIButton *beginButton;
@property(nonatomic, retain)UIProgressView *playerProgressView;
@property(nonatomic, retain)UISlider *playerSlider;
@property(nonatomic, retain)UISegmentedControl *segment;
@property(nonatomic, retain)UIImage *image;
@property(nonatomic, retain)UISlider *redSlider;
@property(nonatomic, retain)UISlider *greenSlider;
@property(nonatomic, retain)UISlider *blueSlider;
@property(nonatomic, retain)UISlider *alphaSlider;
@property(nonatomic, retain)UIImageView *rotaryImageView;
@property(nonatomic, retain)NSTimer *timer;
@property(nonatomic, retain)UIRotationGestureRecognizer *rotation;
@end
@implementation RootViewController
- (void)dealloc
{
[_rotation release];
[_timer release];
[_rotaryImageView release];
[_alphaSlider release];
[_redSlider release];
[_greenSlider release];
[_blueSlider release];
[_segment release];
[_playerSlider release];
[_playerProgressView release];
[_beginButton release];
[_player release];
[_stepper release];
[_imageView release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
#pragma mark set the stepper
self.stepper = [[UIStepper alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
[self.view addSubview:self.stepper];
[self.stepper release];
self.stepper.value = 0;
self.stepper.stepValue = 2;
self.stepper.minimumValue = 0;
self.stepper.maximumValue = 100;
self.stepper.layer.borderWidth = 1;
// connect the player volume to the stepper's value
[self.stepper addTarget:self action:@selector(stepperAction:) forControlEvents:UIControlEventValueChanged];
// self.stepper.layer.cornerRadius = 10;
#pragma mark set the audio file and function
// set the audio file path
NSString *path = [[NSBundle mainBundle] pathForResource:@"吴琼 - 故人叹" ofType:@"mp3"];
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
[self.player prepareToPlay];
self.player.numberOfLoops = NSIntegerMax;
NSLog(@"%.2f", self.player.duration);
#pragma mark player begin button
self.beginButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.view addSubview:self.beginButton];
[self.beginButton release];
self.beginButton.frame = CGRectMake(150, 20, 50, 30);
[self.beginButton setTitle:@"开始" forState:UIControlStateNormal];
self.beginButton.layer.borderWidth = 1;
// begin button function
[self.beginButton addTarget:self action:@selector(beginButton:) forControlEvents:UIControlEventTouchUpInside];
self.beginButton.layer.cornerRadius = 10;
#pragma mark progressView of audio player
self.playerProgressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
[self.view addSubview:self.playerProgressView];
[self.playerProgressView release];
self.playerProgressView.frame = CGRectMake(210, 20, 100, 10);
[self.playerProgressView sizeToFit];
#pragma mark audio slider
self.playerSlider = [[UISlider alloc] initWithFrame:CGRectMake(210, 50, 150, 10)];
[self.view addSubview:self.playerSlider];
[self.playerSlider release];
self.playerSlider.layer.borderWidth = 1;
self.playerSlider.layer.borderColor = [UIColor purpleColor].CGColor;
[self.playerSlider sizeToFit];
self.playerSlider.maximumValue = self.player.duration;
// NSLog(@"~~%.2f", self.playerSlider.maximumValue);
[self.playerSlider addTarget:self action:@selector(sliderDrag:) forControlEvents:UIControlEventTouchDragInside];
#pragma mark segmentControl
self.segment = [[UISegmentedControl alloc] initWithItems:@[@"红", @"绿", @"蓝"]];
[self.view addSubview:self.segment];
[self.segment release];
self.segment.frame = CGRectMake(130, 300, 100, 30);
[self.segment addTarget:self action:@selector(segAction:) forControlEvents:UIControlEventValueChanged];
#pragma mark imageView
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 350, 200, 200)];
[self.view addSubview:self.imageView];
[self.imageView release];
self.imageView.layer.borderWidth = 1;
#pragma mark color modulation slider
// red slider
self.redSlider =[[UISlider alloc] initWithFrame:CGRectMake(210, 170, 150, 30)];
[self.view addSubview:self.redSlider];
[self.redSlider release];
// green slider
self.greenSlider = [[UISlider alloc] initWithFrame:CGRectMake(210, 200, 150, 30)];
[self.view addSubview:self.greenSlider];
[self.greenSlider release];
// blue slider
self.blueSlider = [[UISlider alloc] initWithFrame:CGRectMake(210, 230, 150, 30)];
[self.view addSubview:self.blueSlider];
[self.blueSlider release];
// alpha slider
self.alphaSlider = [[UISlider alloc] initWithFrame:CGRectMake(210, 130, 150, 30)];
[self.view addSubview:self.alphaSlider];
[self.alphaSlider release];
// modulate color
[self.alphaSlider addTarget:self action:@selector(colorModulationAction:) forControlEvents:UIControlEventTouchDragEnter];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(colorModulationAction:) userInfo:nil repeats:YES];
self.alphaSlider.value = 1;
#pragma mark rotate image
self.rotaryImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 100, 200, 200)];
[self.view addSubview:self.rotaryImageView];
[self.rotaryImageView release];
self.rotaryImageView.clipsToBounds = YES;
self.rotaryImageView.layer.cornerRadius = self.rotaryImageView.frame.size.width / 2;
self.image = [UIImage imageNamed:@"Audrey.jpg"];
self.rotaryImageView.layer.borderWidth = 1;
self.rotaryImageView.image = self.image;
self.rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationImageView:)];
[self.view addGestureRecognizer:self.rotation];
[self.rotation release];
self.view.userInteractionEnabled = YES;
}
- (void)rotationImageView:(UIRotationGestureRecognizer *)rotation {
rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);
rotation.rotation = 0;
}
- (void)colorModulationAction:(UISlider *)slider {
// set the alpha slider
self.alphaSlider.maximumValue = 1;
self.alphaSlider.minimumValue = 0;
self.view.alpha = self.alphaSlider.alpha;
// set the red color slider
self.redSlider.minimumValue = 0;
self.redSlider.maximumValue = 1;
// set the green color slider
self.greenSlider.minimumValue = 0;
self.greenSlider.maximumValue = 1;
// set the blue color slider
self.blueSlider.minimumValue = 0;
self.blueSlider.maximumValue = 1;
self.view.backgroundColor = [UIColor colorWithRed:self.redSlider.value green:self.greenSlider.value blue:self.blueSlider.value alpha:self.alphaSlider.value];
}
- (void)segAction:(UISegmentedControl *)segment {
switch (self.segment.selectedSegmentIndex) {
case NSRed:{
self.view.backgroundColor = [UIColor redColor];
NSMutableArray *pictureArray = [NSMutableArray array];
for (NSInteger i = 0; i < 80; i++) {
NSString *imageName = [NSString stringWithFormat:@"drink_%02ld.jpg", i];
self.image = [UIImage imageNamed:imageName];
[pictureArray addObject:self.image];
}
self.imageView.animationImages = pictureArray;
self.imageView.animationDuration = 3;
self.imageView.animationRepeatCount = NSIntegerMax;
[self.imageView startAnimating];
} break;
case NSGreen:{
self.view.backgroundColor = [UIColor greenColor];
NSMutableArray *pictureArray = [NSMutableArray array];
for (NSInteger i = 0; i < 55; i++) {
NSString *imageName = [NSString stringWithFormat:@"scratch_%02ld.jpg", i];
self.image = [UIImage imageNamed:imageName];
[pictureArray addObject:self.image];
}
self.imageView.animationImages = pictureArray;
self.imageView.animationDuration = 2;
self.imageView.animationRepeatCount = NSIntegerMax;
[self.imageView startAnimating];
} break;
case NSBlue:{
self.view.backgroundColor = [UIColor blackColor];
NSMutableArray *pictureArray = [NSMutableArray array];
for (NSInteger i = 0; i < 23; i++) {
NSString *imageName = [NSString stringWithFormat:@"pie_%02ld.jpg", i];
self.image = [UIImage imageNamed:imageName];
[pictureArray addObject:self.image];
}
self.imageView.animationImages = pictureArray;
self.imageView.animationDuration = 1;
self.imageView.animationRepeatCount = NSIntegerMax;
[self.imageView startAnimating];
} break;
default:
break;
}
}
- (void)sliderDrag:(UISlider *)sliderClick {
self.player.currentTime = self.playerSlider.value;
}
- (void)beginButton:(UIButton *)button {
NSLog(@"%.2f", self.player.currentTime);
// rotate imageView
if ([self.beginButton.currentTitle isEqualToString:@"开始"]) {
[self.player play];
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(rotateImage:) userInfo:nil repeats:YES];
[self.beginButton setTitle:@"暂停" forState:UIControlStateNormal];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeProgress:) userInfo:nil repeats:YES];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeSlider:) userInfo:nil repeats:YES];
} else {
[self.beginButton setTitle:@"开始" forState:UIControlStateNormal];
[self.player pause];
[self.timer invalidate];
}
}
// control the imageView rotate angle
- (void)rotateImage:(UIRotationGestureRecognizer *)sender {
self.rotaryImageView.transform = CGAffineTransformRotate(self.rotaryImageView.transform, 3.14 / 100);
}
- (void)changeSlider:(UISlider *)slider {
self.playerSlider.value = self.player.currentTime;
if (self.playerSlider.value == self.player.duration) {
self.playerSlider.value = 0;
}
}
- (void)changeProgress:(UIProgressView *)sender {
self.playerProgressView.progress = self.player.currentTime / self.player.duration;
if (self.player.currentTime == self.player.duration) {
self.playerProgressView.progress = 0;
}
}
- (void)stepperAction:(UIStepper *)stepper {
self.player.volume = self.stepper.value;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}