Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- HTML
- iphone
- 티스토리 초대장
- 티스토리 초대
- 한글
- jQuery
- WebView
- java
- encoding
- XML
- 메모리
- Tomcat
- Memory
- permgen space
- jsp
- udp
- ios
- ipad
- C#
- JavaScript
- 인코딩
- UIWebView
- spring
- 톰켓
- Objective C
- Database
- MySQL
- Eclipse
- 이클립스
Archives
- Today
- Total
suroMind
[iOS]iPhone ProgressView 구현 본문
HTTP로 파일을 업로드하면서 업로드 되는 프로그레스바를 구현할 필요성이 생겼다.
UIAlertView를 이용하여 UIProgressView를 올려서 간단하게 구현해 보았다.
HTTP 커넥션은 NSURLConnection의 delegate를 이용하였고 ASIHTTPRequest를 이용해도 무관하다.
1. 헤더파일에 다음 두개의 변수를 선언
@interface TestFileUploadViewController : UIViewController {
UIProgressView *progressView;
UIAlertView *progressAlert;
}
@property (nonatomic, retain) UIProgressView *progressView;
@property (nonatomic, retain) UIAlertView *progressAlert;
@end
2. 구현부에서는 파일을 선택해서 업로드를 시작한 후에 progressView를 생성하여 화면에 보여주면 된다.
프로그레스바의 값을 NSURLConnection의 delegate를 통해 알아와서 넣어 준다.
//NSURLConnection을 통해 파일업로드하는 메소드
-(void)fileUpload{
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
/*
이 부분은 파일 업로드할 때 정의 하는 부분입니다. 본 포스팅에서는 다루지 않겠습니다.
*/
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start]; // connection을 만드셨으면 업로드 시작
//프로그레스바 생성 및 화면에 보여줌
self.progressAlert = [[UIAlertView alloc] initWithTitle:@"Please wait..."
message:@"파일 업로드 중입니다"
delegate:self cancelButtonTitle:nil
otherButtonTitles:nil];
self.progressAlert.tag = 12;
self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(30.0f, 80.0f, 225.0f, 90.0f)];
[self.progressAlert addSubview:self.progressView];
[self.progressView setProgressViewStyle:UIProgressViewStyleBar];
[self.progressAlert show];
[self.progressAlert release];
}
//총 파일의 크기와 현재까지 업로드된 파일의 크기를 이 메소드를 통해서 알 수 있다.
적당히 계산해서 프로그레스바에 넣어준다.
-(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{
NSLog(@"uploading %d %d %d",bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
float num = totalBytesWritten;
float total = totalBytesExpectedToWrite;
float percent = num/total;
self.progressView.progress = percent;
}
//파일 업로드 완료 되었을 때
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",returnString); // 리턴값이 있다면 확인해 볼 수 있다.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"파일이 업로드 되었습니다"
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles:nil];
[alert show];
[alert release];
[returnString release];
NSLog(@"didReceiveData == %@", returnString);
}
//끝나면 프로그레스바가 있는 Alert을 닫아준다.
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"upload end");
[self.progressAlert dismissWithClickedButtonIndex:0 animated:YES];
}
//파일 업로드 중 실패하였을 경우
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"upload fail");
[self.progressAlert dismissWithClickedButtonIndex:0 animated:YES];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"파일이 업로드를 실패하였습니다."
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles:nil];
[alert show];
[alert release];
}
////////////////////////////////////////////////////////////////////////////////
파일 업로드할 때 구현부는 직접 작성하시기 바라며
ASIHTTPRequest를 이용하시는 분들은 메소드만 살짝씩 바꿔서 쓰시면 될것 같습니다.
'IT분야 > iOS' 카테고리의 다른 글
[iOS] iPhone용 OpenSource 모음 - 펌 (0) | 2011.07.27 |
---|---|
[iOS] UIActionSheet Custom View 추가 (0) | 2011.07.27 |
[iOS] UITableView 행 삭제 (0) | 2011.07.14 |
[iPhone]XCode4 프로젝트에서 Missing File 출력될 시 (0) | 2011.06.29 |
[iPhone]UIWebView에서 Safari 새창 띄우기 (2) | 2011.06.24 |
Comments