Created
March 31, 2013 23:09
-
-
Save t-kashima/5282378 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ListViewController.h | |
// opus | |
// | |
// Created by Kashima Takumi on 2013/03/28. | |
// Copyright (c) 2013年 UNUUU FOUNDATION. All rights reserved. | |
// | |
#import <UIKit/UIKit.h> | |
#import <AssetsLibrary/AssetsLibrary.h> | |
@interface ListViewController : UIViewController <UIScrollViewDelegate> | |
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; | |
@end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ListViewController.m | |
// opus | |
// | |
// Created by Kashima Takumi on 2013/03/28. | |
// Copyright (c) 2013年 UNUUU FOUNDATION. All rights reserved. | |
// | |
#import "ListViewController.h" | |
#import "CircleCell.h" | |
#import "Const.h" | |
@interface ListViewController () | |
@property (strong, nonatomic) ALAssetsLibrary *library; | |
@end | |
@implementation ListViewController | |
#define kImageRadius 100 | |
#define kBigImageRadius 300 | |
#define kOffsetBeyondSpace 380 | |
#define kOffsetTopSpace 80 | |
@synthesize scrollView; | |
NSArray *savedAssets; | |
NSMutableArray *cachedImages; | |
CGSize screenSize; | |
NSMutableArray *imageViews; | |
BOOL finishedLoading; | |
NSInteger bigImageViewIndex; | |
- (void)viewDidLoad | |
{ | |
[super viewDidLoad]; | |
self.library = [[ALAssetsLibrary alloc] init]; | |
cachedImages = [[NSMutableArray alloc] init]; | |
savedAssets = [self getUserSavedAssets]; | |
screenSize = [[UIScreen mainScreen] bounds].size; | |
self.scrollView.delegate = self; | |
imageViews = [[NSMutableArray alloc] init]; | |
bigImageViewIndex = -1; | |
[self displayPhotos]; | |
} | |
- (void)displayPhotos | |
{ | |
finishedLoading = NO; | |
for (int i = 0; i < [savedAssets count]; i++) { | |
NSURL *assetURL = [NSURL URLWithString:[savedAssets objectAtIndex:i]]; | |
[self.library assetForURL:assetURL | |
resultBlock:^(ALAsset *asset) { | |
if (i == ([savedAssets count] - 1)) { | |
finishedLoading = YES; | |
} | |
if (asset == nil || [asset defaultRepresentation] == nil) return; | |
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(screenSize.width / 2 - kImageRadius / 2, | |
kOffsetBeyondSpace + [imageViews count] * kImageRadius, | |
kImageRadius, kImageRadius)]; | |
if ([cachedImages count] <= i) { | |
UIImage *image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]; | |
[cachedImages addObject:image]; | |
imageView.image = image; | |
} else { | |
imageView.image = [cachedImages objectAtIndex:i]; | |
} | |
[self.scrollView addSubview:imageView]; | |
[self.scrollView setContentSize:CGSizeMake(screenSize.width, | |
kOffsetTopSpace * 2 + [imageViews count] * kImageRadius + kBigImageRadius)]; | |
[imageViews addObject:imageView]; | |
if (finishedLoading == YES) { | |
[self settingImageViewSize]; | |
} | |
} failureBlock:nil]; | |
} | |
} | |
- (void)scrollViewDidScroll:(UIScrollView *)scrollView | |
{ | |
[self settingImageViewSize]; | |
// NSLog(@"scrollView:%f", self.scrollView.contentOffset.y); | |
} | |
- (void)settingImageViewSize | |
{ | |
NSInteger index = [self getBigImageViewIndex:self.scrollView.contentOffset.y]; | |
if (bigImageViewIndex != index) { | |
bigImageViewIndex = index; | |
// NSLog(@"scrollIndex:%d", bigImageViewIndex); | |
[self settingBigWithIndex:bigImageViewIndex]; | |
} | |
} | |
- (NSInteger)getBigImageViewIndex:(NSInteger)offsetY | |
{ | |
NSInteger index = 0; | |
for (int i = 0; i < [imageViews count]; i++) { | |
UIImageView *imageView = [imageViews objectAtIndex:i]; | |
CGRect frame = imageView.frame; | |
if ((bigImageViewIndex > i && | |
(frame.origin.y + frame.size.height) >= (offsetY + kOffsetTopSpace) && | |
(frame.origin.y + frame.size.height) <= (offsetY + kOffsetBeyondSpace) | |
) || | |
(bigImageViewIndex < i && | |
frame.origin.y >= (offsetY + kOffsetTopSpace) && | |
frame.origin.y <= (offsetY + kOffsetBeyondSpace))) { | |
index = i; | |
break; | |
} | |
} | |
return index; | |
} | |
- (void)settingBigWithIndex:(NSInteger)index | |
{ | |
for (int i = 0; i < [imageViews count]; i++) { | |
UIImageView *imageView = [imageViews objectAtIndex:i]; | |
if (i < index) { | |
float y = self.scrollView.contentOffset.y + kOffsetTopSpace - (index - i) * kImageRadius; | |
imageView.frame = CGRectMake(screenSize.width / 2 - kImageRadius / 2, | |
y, | |
kImageRadius, kImageRadius); | |
NSLog(@"index:%d, offsetY:%f", i, y); | |
} else if (i == index) { | |
float y = self.scrollView.contentOffset.y + kOffsetTopSpace; | |
imageView.frame = CGRectMake(screenSize.width / 2 - kBigImageRadius / 2, | |
y, | |
kBigImageRadius, kBigImageRadius); | |
} else { | |
float y = self.scrollView.contentOffset.y + kOffsetBeyondSpace + (i - index - 1) * kImageRadius; | |
imageView.frame = CGRectMake(screenSize.width / 2 - kImageRadius / 2, | |
y, | |
kImageRadius, kImageRadius); | |
} | |
} | |
} | |
- (NSArray *)getUserSavedAssets | |
{ | |
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; | |
return [userDefaults arrayForKey:kUserSavedAssetsKey]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment