Skip to content

Instantly share code, notes, and snippets.

@somtd
Created December 4, 2013 15:04
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save somtd/7788985 to your computer and use it in GitHub Desktop.
C4 Advent Calendar #4 SeekAndScale #BLOG
//
// C4WorkSpace.m
// SeekAndScale
//
// Created by SOMTD on 2013/12/04.
//
@implementation C4WorkSpace {
C4Sample *sample;
C4Slider *slider;
//Level Circle
C4Shape *levelCircle;
//Masked Image
C4Image *maskedImage;
//Timer
C4Timer *meterUpdateTimer;
}
-(void)setup {
sample = [C4Sample sampleNamed:@"C4Loop.aif"];
sample.loops = YES;
//metering enable
sample.meteringEnabled = YES;
[sample play];
[self setupCircle];
[self setupSlider];
meterUpdateTimer = [C4Timer timerWithInterval:1/30.0f target:self method:@"updateMeters" repeats:YES];
[meterUpdateTimer start];
}
-(void)updateMeters {
[sample updateMeters];
CGFloat avg = [C4Math pow:10 raisedTo:0.05 * [sample averagePowerForChannel:0]];
float scale;
scale = 0.8 + (avg * 0.3);
[UIView animateWithDuration:1/30.0f animations:^{
CGAffineTransform myTransform = CGAffineTransformMakeScale(scale, scale);
levelCircle.transform = myTransform;
maskedImage.center = self.canvas.center;
maskedImage.mask = levelCircle;
}];
}
-(void)changeCurrentTime:(C4Slider *)aSlider {
sample.currentTime = aSlider.value * sample.duration;
}
-(void)updateSlider {
slider.value = sample.currentTime / sample.duration;
[self runMethod:@"updateSlider" afterDelay:0.01f];
}
-(void)setupCircle
{
maskedImage = [C4Image imageNamed:@"C4Sky.png"];
maskedImage.width = self.canvas.width;
maskedImage.center = self.canvas.center;
levelCircle = [C4Shape ellipse:CGRectMake(0, 0, 240, 240)];
levelCircle.center = CGPointMake(maskedImage.center.x, maskedImage.height/2) ;
maskedImage.mask = levelCircle;
[self.canvas addImage:maskedImage];
}
-(void)setupSlider {
slider = [C4Slider slider:CGRectMake(0, 0, 320, 44)];
slider.center = CGPointMake(self.canvas.center.x, self.canvas.height - 100);
[slider runMethod:@"changeCurrentTime:" target:self forEvent:VALUECHANGED];
[self.canvas addSubview:slider];
[self updateSlider];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment