http://pds21.egloos.com/pds/201301/28/37/iCarousel.zip
http://pds27.egloos.com/pds/201301/28/37/Filtrr.zip
- filter.h -
<iCarouselDataSource, iCarouselDelegate>
UIImage *originImg;
UIImage *smallImg;
iCarousel *carousel;
NSMutableArray *filterImgSet;
@property (nonatomic, strong) UIImage *originImg;
@property (nonatomic, strong) UIImage *smallImg;
@property (nonatomic, strong) iCarousel *carousel;
@property (nonatomic, strong) NSMutableArray *filterImgSet;
- filter.m -
@synthesize smallImg, originImg, carousel, filterImgSet;
-(IBAction) selectFilter:(id)sender{
UIActionSheet *actionSheet;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"닫기" destructiveButtonTitle:@"사진찍기" otherButtonTitles:@"사진가져오기", nil];
[actionSheet showInView:self.view];
}else {
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"닫기" destructiveButtonTitle:nil otherButtonTitles:@"필터1 적용",@"필터1 적용",@"필터1 적용", nil];
[actionSheet showInView:self.view];
}
}
-(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if(buttonIndex == [actionSheet cancelButtonIndex]){
return;
}
UIImagePickerController *imgPicker = [[UIImagePickerController alloc] init];
imgPicker.delegate = self;
//NSLog(@"%d",buttonIndex);
if (buttonIndex == [actionSheet destructiveButtonIndex]) {
[imgPicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}else if (buttonIndex == [actionSheet firstOtherButtonIndex]) {
[imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
[imgPicker setAllowsEditing:YES];
[self presentModalViewController:imgPicker animated:YES];
}
-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
}
-(void) actionSheetCancel:(UIActionSheet *)actionSheet{
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{
originImg = image;
[filterImgView setImage:originImg];
[picker dismissModalViewControllerAnimated:YES];
}
-(CGSize) originSize:(CGSize)thisSize inSize:(CGSize)afterSize{
CGFloat scale;
CGSize newSize = thisSize;
if (newSize.height >= afterSize.height) {
scale = afterSize.height / newSize.height;
newSize.width *= scale;
newSize.height *= scale;
}
if (newSize.width >= afterSize.width) {
scale = afterSize.width / newSize.width;
newSize.width *= scale;
newSize.height *= scale;
}
return newSize;
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *picture = [info valueForKey:UIImagePickerControllerEditedImage];
checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(picture, 0.8f)];
originImg = picture;
CGRect thumbRect=CGRectMake(0, 0, 150, 150);
UIGraphicsBeginImageContext(thumbRect.size);
[picture drawInRect:thumbRect];
smallImg = UIGraphicsGetImageFromCurrentImageContext();
[UIActivityIndicatorView showLoadingWithView:self.view];
[self performSelectorInBackground:@selector(filteringImg) withObject:nil];
}
-(void) filteringImg{
if ([filterImgSet count]>0) {
[filterImgSet removeAllObjects];
}
for (NSInteger i=0; i<5; i++) {
NSString *filterType = [NSString stringWithFormat:@"e%d",i+1];
//SEL selectedFilterName = NSSelectorFromString(filterType);
//UIImage *effectedImg = [smallImg performSelector:selectedFilterName];
UIImage *effectedImg = [smallImg trackTime:filterType];
[filterImgSet addObject:effectedImg];
}
[self performSelectorOnMainThread:@selector(FilteringDone) withObject:nil waitUntilDone:YES];
}
-(void) FilteringDone{
BOOL isFilter = YES;
if (isFilter) {
if (carousel == nil) {
carousel = [[iCarousel alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[carousel setDelegate:self];
[carousel setDataSource:self];
[self.view addSubview:carousel];
}
carousel.type = iCarouselTypeCoverFlow;
[carousel reloadData];
[carousel setAlpha:1.0f];
[carousel setHidden:NO];
}
[UIActivityIndicatorView hideLoadingWithView:self.view];
}
-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[picker dismissModalViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark iCarousel methods
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
return 5;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
//create new view if no view is available for recycling
if (view == nil)
{
view = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 230.0f, 150.0f)] autorelease];
}
((UIImageView *)view).image = [filterImgSet objectAtIndex:index];
view.contentMode = UIViewContentModeScaleAspectFit;
return view;
}
- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index{
NSString *filterType = [NSString stringWithFormat:@"e%d",index+1];
//SEL selectedFilterName = NSSelectorFromString(filterType);
//UIImage *effectedImg = [originImg performSelector:selectedFilterName];
[UIActivityIndicatorView showLoadingWithView:self.view];
[self performSelectorInBackground:@selector(effectProc:) withObject:filterType];
}
-(void) effectProc:(NSString *)filterType{
UIImage *effectedImg = [originImg trackTime:filterType];
//[selectedImg setImage:[filterImgSet objectAtIndex:index]];
[selectedImg setImage:effectedImg];
[selectedImg setContentMode:UIViewContentModeScaleAspectFill];
[selectedImg setClipsToBounds:YES];
//checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation([filterImgSet objectAtIndex:index], 0.8f)];
checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(effectedImg, 0.8f)];
[self performSelectorOnMainThread:@selector(effectDone) withObject:nil waitUntilDone:YES];
}
-(void) effectDone{
[UIActivityIndicatorView hideLoadingWithView:self.view];
[UIView beginAnimations:@"hideFilter" context:nil];
[UIView setAnimationDuration:0.5f];
[carousel setAlpha:0.0f];
[carousel setHidden:YES];
[UIView commitAnimations];
}
- (CATransform3D)carousel:(iCarousel *)_carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
//implement 'flip3D' style carousel
transform = CATransform3DRotate(transform, M_PI / 8.0f, 0.0f, 1.0f, 0.0f);
return CATransform3DTranslate(transform, 0.0f, 0.0f, offset * carousel.itemWidth);
}
- (CGFloat)carousel:(iCarousel *)_carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
//customize carousel display
switch (option)
{
case iCarouselOptionWrap:
{
//normally you would hard-code this to YES or NO
return YES;
}
case iCarouselOptionSpacing:
{
//add a bit of spacing between the item views
return value * 1.05f;
}
case iCarouselOptionFadeMax:
{
if (carousel.type == iCarouselTypeCustom)
{
//set opacity based on distance from camera
return 0.0f;
}
return value;
}
default:
{
return value;
}
}
}
http://pds27.egloos.com/pds/201301/28/37/Filtrr.zip
- filter.h -
<iCarouselDataSource, iCarouselDelegate>
UIImage *originImg;
UIImage *smallImg;
iCarousel *carousel;
NSMutableArray *filterImgSet;
@property (nonatomic, strong) UIImage *originImg;
@property (nonatomic, strong) UIImage *smallImg;
@property (nonatomic, strong) iCarousel *carousel;
@property (nonatomic, strong) NSMutableArray *filterImgSet;
- filter.m -
@synthesize smallImg, originImg, carousel, filterImgSet;
-(IBAction) selectFilter:(id)sender{
UIActionSheet *actionSheet;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"닫기" destructiveButtonTitle:@"사진찍기" otherButtonTitles:@"사진가져오기", nil];
[actionSheet showInView:self.view];
}else {
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"닫기" destructiveButtonTitle:nil otherButtonTitles:@"필터1 적용",@"필터1 적용",@"필터1 적용", nil];
[actionSheet showInView:self.view];
}
}
-(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if(buttonIndex == [actionSheet cancelButtonIndex]){
return;
}
UIImagePickerController *imgPicker = [[UIImagePickerController alloc] init];
imgPicker.delegate = self;
//NSLog(@"%d",buttonIndex);
if (buttonIndex == [actionSheet destructiveButtonIndex]) {
[imgPicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}else if (buttonIndex == [actionSheet firstOtherButtonIndex]) {
[imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
[imgPicker setAllowsEditing:YES];
[self presentModalViewController:imgPicker animated:YES];
}
-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
}
-(void) actionSheetCancel:(UIActionSheet *)actionSheet{
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{
originImg = image;
[filterImgView setImage:originImg];
[picker dismissModalViewControllerAnimated:YES];
}
-(CGSize) originSize:(CGSize)thisSize inSize:(CGSize)afterSize{
CGFloat scale;
CGSize newSize = thisSize;
if (newSize.height >= afterSize.height) {
scale = afterSize.height / newSize.height;
newSize.width *= scale;
newSize.height *= scale;
}
if (newSize.width >= afterSize.width) {
scale = afterSize.width / newSize.width;
newSize.width *= scale;
newSize.height *= scale;
}
return newSize;
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *picture = [info valueForKey:UIImagePickerControllerEditedImage];
checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(picture, 0.8f)];
originImg = picture;
CGRect thumbRect=CGRectMake(0, 0, 150, 150);
UIGraphicsBeginImageContext(thumbRect.size);
[picture drawInRect:thumbRect];
smallImg = UIGraphicsGetImageFromCurrentImageContext();
[UIActivityIndicatorView showLoadingWithView:self.view];
[self performSelectorInBackground:@selector(filteringImg) withObject:nil];
}
-(void) filteringImg{
if ([filterImgSet count]>0) {
[filterImgSet removeAllObjects];
}
for (NSInteger i=0; i<5; i++) {
NSString *filterType = [NSString stringWithFormat:@"e%d",i+1];
//SEL selectedFilterName = NSSelectorFromString(filterType);
//UIImage *effectedImg = [smallImg performSelector:selectedFilterName];
UIImage *effectedImg = [smallImg trackTime:filterType];
[filterImgSet addObject:effectedImg];
}
[self performSelectorOnMainThread:@selector(FilteringDone) withObject:nil waitUntilDone:YES];
}
-(void) FilteringDone{
BOOL isFilter = YES;
if (isFilter) {
if (carousel == nil) {
carousel = [[iCarousel alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[carousel setDelegate:self];
[carousel setDataSource:self];
[self.view addSubview:carousel];
}
carousel.type = iCarouselTypeCoverFlow;
[carousel reloadData];
[carousel setAlpha:1.0f];
[carousel setHidden:NO];
}
[UIActivityIndicatorView hideLoadingWithView:self.view];
}
-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[picker dismissModalViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark iCarousel methods
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
return 5;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
//create new view if no view is available for recycling
if (view == nil)
{
view = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 230.0f, 150.0f)] autorelease];
}
((UIImageView *)view).image = [filterImgSet objectAtIndex:index];
view.contentMode = UIViewContentModeScaleAspectFit;
return view;
}
- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index{
NSString *filterType = [NSString stringWithFormat:@"e%d",index+1];
//SEL selectedFilterName = NSSelectorFromString(filterType);
//UIImage *effectedImg = [originImg performSelector:selectedFilterName];
[UIActivityIndicatorView showLoadingWithView:self.view];
[self performSelectorInBackground:@selector(effectProc:) withObject:filterType];
}
-(void) effectProc:(NSString *)filterType{
UIImage *effectedImg = [originImg trackTime:filterType];
//[selectedImg setImage:[filterImgSet objectAtIndex:index]];
[selectedImg setImage:effectedImg];
[selectedImg setContentMode:UIViewContentModeScaleAspectFill];
[selectedImg setClipsToBounds:YES];
//checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation([filterImgSet objectAtIndex:index], 0.8f)];
checkinImgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(effectedImg, 0.8f)];
[self performSelectorOnMainThread:@selector(effectDone) withObject:nil waitUntilDone:YES];
}
-(void) effectDone{
[UIActivityIndicatorView hideLoadingWithView:self.view];
[UIView beginAnimations:@"hideFilter" context:nil];
[UIView setAnimationDuration:0.5f];
[carousel setAlpha:0.0f];
[carousel setHidden:YES];
[UIView commitAnimations];
}
- (CATransform3D)carousel:(iCarousel *)_carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
//implement 'flip3D' style carousel
transform = CATransform3DRotate(transform, M_PI / 8.0f, 0.0f, 1.0f, 0.0f);
return CATransform3DTranslate(transform, 0.0f, 0.0f, offset * carousel.itemWidth);
}
- (CGFloat)carousel:(iCarousel *)_carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
//customize carousel display
switch (option)
{
case iCarouselOptionWrap:
{
//normally you would hard-code this to YES or NO
return YES;
}
case iCarouselOptionSpacing:
{
//add a bit of spacing between the item views
return value * 1.05f;
}
case iCarouselOptionFadeMax:
{
if (carousel.type == iCarouselTypeCustom)
{
//set opacity based on distance from camera
return 0.0f;
}
return value;
}
default:
{
return value;
}
}
}



덧글