검색결과 리스트
글
출처 : https://github.com/leah/PullToRefresh
소스 분석하면서 직접 구현해 본것.
나중에 사용하기 위해서 저장
// viewcontroller.h
// viewcontroller.m
소스 분석하면서 직접 구현해 본것.
나중에 사용하기 위해서 저장
// viewcontroller.h
@interface ViewController : UIViewController <UITableViewDatasource, UITableViewDelegate> { NSMutableArray *data; BOOL bLoading; BOOL bDragging; UIView *headerView; UIActivityIndicatorView *activity; UILabel *label; UIImageView *imageView; NSString *strBeginDragging; NSString *strEndDragging; NSString *strLoading; } @property (nonatomic, retain) NSMutableArray *data; @property (nonatomic, assign, getter = isLoading ) BOOL bLoading; @property (nonatomic, assign, getter = isDraggin ) BOOL bDragging; @property (nonatomic, retain) UIActivityIndicatorView *activity; @property (nonatomic, retain) UIView *headerView; @property (nonatomic, retain) UILabel *label; @property (nonatomic, retain) UIImageView *imageView; @property (nonatomic, retain) NSString *strBeginDragging; @property (nonatomic, retain) NSString *strEndDragging; @property (nonatomic, retain) NSString *strLoading; - (void)createHeader; @end
// viewcontroller.m
#define REFRESH_HEADER_HEIGHT 60.0f @implementation ViewController @synthesize data; @synthesize bLoading, bDragging; @synthesize activity, headerView; @synthesize label; @synthesize imageView; @synthesize strBeginDragging, strEndDragging, strLoading; #pragma mark - animation - (void)refresh { // This is just a demo. Override this method with your custom reload action. // Don't forget to call stopLoading at the end. [self performSelector:@selector(stopLoading) withObject:nil afterDelay:2.0]; } - (void)startLoading { self.bLoading = true; // Show the header [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; UITableView *tableView = (UITableView *)self.view; tableView.contentInset = UIEdgeInsetsMake(REFRESH_HEADER_HEIGHT, 0, 0, 0); label.text = strLoading; [activity startAnimating]; [UIView commitAnimations]; // Refresh action! [self refresh]; } - (void)stopLoading { self.bLoading = false; // Hide the header [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDidStopSelector:@selector(stopLoadingComplete:finished:context:)]; UITableView *tableView = (UITableView *)self.view; tableView.contentInset = UIEdgeInsetsZero; //[refreshArrow layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1); [self.activity stopAnimating]; [UIView commitAnimations]; } - (void)stopLoadingComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { // Reset the header label.text = strBeginDragging; label.text = strBeginDragging; [imageView layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1); } #pragma mark - scroll events - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { if ( self.isLoading ) return; self.bDragging = true; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if ( self.isLoading ) { //NSLog(@"isLoading : %f", scrollView.contentOffset.y ); } else if ( self.isDraggin && scrollView.contentOffset.y < 0 ) { //NSLog(@"self.isDragging ; %f", scrollView.contentOffset.y ); [UIView beginAnimations:nil context:NULL]; if (scrollView.contentOffset.y < -REFRESH_HEADER_HEIGHT) { // User is scrolling above the header label.text = strEndDragging; [imageView layer].transform = CATransform3DMakeRotation(M_PI, 0, 0, 1); } else { // User is scrolling somewhere within the header label.text = strBeginDragging; [imageView layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1); } [UIView commitAnimations]; } } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if ( self.isLoading ) return; self.bDragging = false; NSLog(@"scrollView.contentOffset.y: %f <= %f", scrollView.contentOffset.y, -REFRESH_HEADER_HEIGHT); if (scrollView.contentOffset.y <= -REFRESH_HEADER_HEIGHT) { // Released above the header [self startLoading]; } } #pragma mark - dealloc - (void)createHeader { strBeginDragging = [[NSString alloc] initWithString:@"새글을 불러오시겠습니까?"]; strEndDragging = [[NSString alloc] initWithString:@"놓으면 새글을 불러옵니다."]; strLoading = [[NSString alloc] initWithString:@"로딩중입니다..."]; // view headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0-REFRESH_HEADER_HEIGHT, 320, REFRESH_HEADER_HEIGHT)]; // activityindicator activity = [[UIActivityIndicatorView alloc] init]; activity.center = CGPointMake(320.f/2, REFRESH_HEADER_HEIGHT/2); activity.hidesWhenStopped = true; activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; // label label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, REFRESH_HEADER_HEIGHT)]; label.text = strBeginDragging; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:12.0]; label.textAlignment = UITextAlignmentCenter; // imageView UIImage *image = [UIImage imageNamed:@"arrow.png"]; imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CGRectMake(0 , (REFRESH_HEADER_HEIGHT-image.size.height) /2 , image.size.width , image.size.height); imageView.backgroundColor = [UIColor clearColor]; [headerView addSubview:activity]; [headerView addSubview:label]; [headerView addSubview:imageView]; [self.view addSubview:headerView]; } - (void)dealloc { [strLoading release]; [strBeginDragging release]; [strEndDragging release]; [imageView release]; [label release]; [activity release]; [headerView release]; [data release]; [super dealloc]; } #pragma mark - table datasource - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = [data objectAtIndex:indexPath.row]; return cell; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [data count]; } #pragma mark - memorywarning - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.data = [NSMutableArray arrayWithObjects: @"Pull down to refresh", nil]; [self createHeader]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } @end
'Mobile > iPhone / Xcode' 카테고리의 다른 글
[iOS] iOS5 GM 설치후 Personal Hotspot이 안나타날때 처리 방법 (0) | 2011.10.13 |
---|---|
아이폰 펌웨어 업데이트 (0) | 2011.10.05 |
[iOS] 아이폰 SMS 말풍선을 만들어 보기 (1) | 2011.09.24 |
[iOS] 프로젝트를 묶는 논리적 개념 Workspace (0) | 2011.09.17 |
[iOS] Using Open Source Static Libraries in Xcode 4 (0) | 2011.09.16 |
RECENT COMMENT