본문 바로가기

프로그래밍/iOS243

tableview에 "Twenty Five More..." 같은 기능 제가 앱스토어에 어플목록 나오는 것 처럼 "Twenty Five More..." 같은 버튼을 누르면 테이블뷰의 셀의 수가 더 늘어나면서 추가되는걸 구현하려고 하는데요. (데이터는 한번에 10개씩 파싱해서 가져옵니다.) 처음에 맨위(index.row ==0) 의 셀부터 10개의 데이터와 맨밑인 11번째 셀((index.row ==10)에 "10개 더 불러오기"는 제대로 표시가 됩니다. 셀 높이는 한번에 7개씩 보일 정도의 크기이구요. 그런데 테이블뷰를 11번째 셀이 보이도록 맨 위로 한번 올리고 나면 위에서 두번째(index.row ==1) 셀의 내용이 파싱해서 가져온 내용이 아니라 "10개 더 불러오기"로 바뀝니다. 두번째 셀은 화면에서 사라졌다가 나타난 셀이구요. 테이블뷰를 잡고(?) 끝까지 올렸다 내.. 2011. 7. 5.
UIImageView에 원격이미지 비동기 로드 및 캐쉬 기능 넣기 아이폰 개발시작한지 3~4개월 되어가면서 조금 감각을 익히기 시작했습니다. 어플도 그동안 3개 만들어 올려보고요. 물론 사운드, 그래픽을 고급스럽게 다뤄보지는 못했지만 기본 UI기반으로 개발할때도 워낙 이슈가 많다보니 학습과 개발을 병행하는게 정말 쉽지 않더군요.... 각설하고요 ㅎㅎ 여기에 소개할 것은 UIImageView에 원격 이미지를 비동기로 로드할 수 있도록 하는 기능과 이미지 캐쉬 기능을 추가한 소스를 공개하려고 합니다.(소스 분석은 주석을 참고 ^^) 아이폰 어플 개발하면 UIImageView를 매우 많이 사용할 겁니다. 번들이미지의 경우야 어짜피 문제 없지만 원격이미지를 로드할때는 몇가지 이슈가 발생합니다. 1. 원격이미지를 매번 로드하는 것은 네트워크 부하를 일으키며 특히나 3G사용자들에.. 2011. 7. 4.
PHP로 구현하는 APNS (아이폰 푸쉬 서비스) 처음 푸쉬를 구현하려고 자료를 찾을 때 보노님 포스트에서 PHP로 구현하는 법은 인터넷에 많다시며 JAVA로 포스팅한 것을 보았다. 하지만 난 찾을 수 없었다 -_-; 넘흐넘흐 어려웠다! 나름 키워드 선택력이 탁월하다 생각한 본인인데!!! 자 그럼 거두절미하고 차근차근 따라가보자. 우선 여러분께 알려드릴 포스트가 있다. Boxed Ice라는 블로그에 David Mytton이라는 필명을 쓰신 분께서 포스팅한 How to build an Apple Push Notification provider server (tutorial) 사실 위 포스팅이면 무리 없이 구현 가능하다고 본다... 만!!! 약간 쉬운 방법과 함께, 사실 우린 한글을 좋아한다 ㅡ,.ㅡ! 우선 iOS의 푸쉬 기능을 사용하려면 개발자 등록이 필.. 2011. 7. 4.
uiview trasition(UIView 좌우 슬라이드) 배너를 우에서 좌로 밀어내듯이 롤링 시키는 효과를 줘야하는 작업이 생겼다 구글신을 찾던 도중에 아래와 같은 방법을 찾았다. 실제 해보지는 않았지만 소스만 봐서는 그럴듯 해 보인다. 나중에 해봐야지... 방법 1. [UIView beginAnimations:nil context:nil]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view1.view cache:YES]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view2.view cache:YES]; [UIView setAnimationDuration: 1.5]; [.. 2011. 6. 24.
디버깅시 NSLog 팁 디버깅시 유용한 팁이다. 우리는 로그를 출력할 때 NSLog를 사용하는데 파일명과 함수명 그리고 라인넘버를 출력하려면 다음과 같은 코드를 쓰면된다. NSLog(@"%s :: %s :: %d" , __FILE__,__FUNCTION__,__LINE__); 위처럼 로그를 찍으면 해당 소스파일의 위치와 라인을 Debugger Console에서 다음과 같이 출력해 준다. [Session started at 2011-01-24 17:03:41 +0900.] 2011-01-24 17:03:47.009 adidas[2614:207] /Users/reysion/Documents/ex/Classes/LoginView.m :: -[LoginView loginAction] :: 44 LoginView.m 파일(loginAc.. 2011. 6. 12.
UIScrollView와 UIPageControl을 이용하여 페이징 처리하기 UIPageControl와 UIScrollView를 이용하여 페이징 처리를 해보죠. UIScrollView에 세개의 이미지를 좌우로 넘겨 볼수 있도록 UIPageControl을 이용해 처리하려고 합니다. 우선 Interface builder에서 Library에 있는 Scroll View와 Page Control을 View에 추가 합니다. 그리고 이를 연결할 UIScrollView와 UIPageControl을 정의 하고 xib의 File's Owner를 클릭한 후 control버튼을 누르고 드레그하여 Scroll View, Page Control을 연결해 해당하는 Outlet을 연결합니다. HomeView.h #import @interface HomeView : UIViewController { //UIS.. 2011. 6. 12.
시작하세요! 아이폰 3 프로그래밍 - Part 8. 테이블 뷰 입문 * 테이블 - 테이블은 데이터의 목록을 표시한다. - 테이블 목록의 각각의 항목은 행(row).각 행마다 열(column)은 하나만 있다. - 테이블 뷰는 테이블에 있는 데이터를 보여주는 뷰이고 UITableView클래스의 인스턴스이다. 테이블에 각각의 행은 UITableViewCell 클래스로 구현된다. 그래서 테이블 뷰는 테이블의 전체적인 모양을 담당하는 객체이고 테이블 뷰 셀(table view cell)이 테이블의 각각의 행을 그리는 일을 담당한다. - 테이블 뷰는 테이블의 데이터를 저장하는 역할은 하지 않는다. 단지 현재 보여주는 행을 그릴때 필요한 데이터만 저장한다. - 테이블 뷰의 설정 데이터는 UITableVewDelegate 프로토콜을 따르는 객체에서 구하고 각 행의 데이터는 UITabl.. 2011. 6. 8.
[UITableView] TableView에 TextField, Switch 붙이기 switch (indexPath.row) { case 0: { [cell.textLabel setText:@"ID :"]; [cell.textLabel setTextAlignment:UITextAlignmentRight]; UIView*viewCell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 40)]; UITextField *textUserID = [[UITextField alloc] initWithFrame:CGRectMake(0, 10, 160, 31)]; [viewCelladdSubview:textUserID]; [textUserID setTag:0]; [textUserID setText:[dictUserData objectForKey:@"ID.. 2011. 6. 8.
UITableView Cell에 두줄 입력하기 UITableView에 Cell 내용을 두줄 이상 넣는 방법입니다. Cell속성을 컨트롤 하는 거라 Cell에 내용을 채워넣는 cellForRowAtIndexPath 함수에서 작업해주면 됩니다. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // cell에 채워질 내용 cell.textLabel.text = @"First Lint \nSecond Line"; // 표시될 라인수 설정 cell.textLabel.numberOfLines = 2; // 자동 줄바꿈 활성화 cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;.. 2011. 6. 8.
iPhone용 Open Source 모음 http://code.google.com/p/oauthconsumner/ http://code.google.com/p/mpoauthconnection/ http://getsharekit.com/ http://code.google.com/p/nate-ios-client-api/ https://github.com/facebook/facebook-ios-sdk http://code.google.com/p/cocoaasyncsocket/ https://github.com/enormego/cocoa-helpers https://github.com/woohj70/iPhotoDiary https://www.dropbox.com/developers/releases ------------------------------.. 2011. 6. 5.
위치정보(GPS) 위치정보는 CLLocation과 CLLocationManager 두개의 클래스에서 관리가 된다. CLLocationManager에게 정보를 요청하면 CLLocation 인스턴스에 정보를 담아서 알려준다. 정보를 알려줄 때는 CLLocationManagerDelegate 프로토콜의 locationManager:didUpdateToLocation:fromLocation 메서드를 통해서 알려주므로 위치정보를 알고자 하는 클래스에서 이 프로토콜을 따르도록 해주고 해당 메서드를 구현해주어야 한다. ( 오류발생시에는 locationManager:didFailWithError: 메서드로 통보해준다. ) 구현 절차를 보면, 1. 코어 로케이션 프레임워크가 기본적으로 포함되어 있지 않으므로, 코어 로케이션 프레임워크를 .. 2011. 6. 3.
뷰 Animation효과 - 모달창 띄우기 / 창뒤짚이는효과 / 페이지넘김효과 >> 모달창 효과 1. View-base로 프로젝트를 생성한다. 2. 모달로 띄울 용도의 뷰컨트롤러 클래스를 추가한다. ( UIViewController subclass / XIB가짐 ) 클래스명 : MyModal 3. 부모 View에서 특정 액션시에 아래와 같이 MyModal 뷰를 띄운다. ( 부모뷰컨트롤러의 presentModalViewController:animated: 메서드를 이용한다. ) MyModal* myModal = [[MyModal alloc] initWithNibName:@"MyModal" bundle:nil]; [부모뷰컨트롤러객체 presentModalViewController:myModal animated:YES]; [myModal release]; 4. 모달로 뜬 View 에서 .. 2011. 6. 3.
@property 옵션 정리 @interface MyClass : ParentClass { int param1; NSString* param2; } @property(assign,readwrite,nonatomic) int param1; @property(retain,atomic) NSString* param2; 위와 같이 두개의 property를 이용해서 클래스 멤버에 대한 접근자를 자동으로 생성해주게 되는데, 몇가지 옵션에 따라서 접근자의 성격이 달라지게 된다. 멤버가 값 타입인 경우에는 옵션으로 assign을 설정하거나 지정하지 않으면 된다. 멤버가 객체타입인 경우에는 assign, retain, copy 중 하나를 옵션으로 지정하여야 한다. 옵션에 따라 자동으로 생성되어지는 setter 접근자는 다음과 같이 차이가 있다. >.. 2011. 6. 3.
iOS 메모리 관리 1. alloc/copy/new/retain/Create 메소드로 생성 또는 지정한 객체는 개발자 스스로 release 해야한다. alloc 한만큼 release 해야한다. 2. 위 메소드 이외의 메소드로 생성한 객체는 대부분 autorelease 상태이다. autorelease 상태의 객체는 그 블럭에서만 유효하고 그 이후에는 언제 사라질지 알수가 없다. 얻어진 객체를 계속 사용하려면 retain 시켜줘야 한다. 위 규칙은 컴파일러에서 보장되는 원칙이 아니다. 따라서 autorelease 상태가 아닐 수 있다. 3. 개발자가 생성한 메소드가 객체를 반환할때는 위 2번 규칙에 따라 만드는 것이 좋다. 나도 헤깔리지 않고, 소스를 넘겨받은 사람도 헤깔리지 않는다. 4. 집합체(NSArray 등) 객체에 객.. 2011. 6. 2.
MPMoviePlayerController의 Notifications목록 MPMovieDurationAvailableNotification 동영상 객체의 총 재생시간을 알아낼 경우 알림이 발생한다. 총 재생시간은 MoviePlayerController.property에 반영된다. MPMovieMediaTypesAvailableNotification 동영상 객체의 미디어 타입이 파악된 경우 알림이 발생한다. 지원되는 미디어 타입은 MoviePlayerController.movieMediaTypes에 반영된다. MPMovieNaturalSizeAvailableNotification 동영상 객체의 프레임 사이즈가 처음 파악된 경우, 혹은 그 후에라도 변경된 경우 알림이 발생한다. 프레임 사이즈값은 MoviePlayerController.naturalSize에 반영된다 MPMovie.. 2011. 6. 2.
UIView 화면 터치시 single tap , double tap에 대한 구현 아이폰 개발시 화면 터치에 대한 single tap , double tap에 대해서 구현해보자 물론 UIView를 상속 받아야지만 아래의 터치 관련 함수가 콜된다~ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSUInteger tapCount = [touch tapCount]; switch (tapCount) { case 1: [self performSelector:@selector(singleTapMethod:) withObject:nil afterDelay:.4]; break; case 2: [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(s.. 2011. 6. 2.
NSMutableDictionary 사용법 및 삽입 ,삭제에 대해서 알아보자 1. NSMutableDictionary 생성 및 add 방법 //생성 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; //item add [dictionary setObject:@"A Book about the Letter A" forKey:@"A"]; [dictionary setObject:@"A Book about the Letter B" forKey:@"B"]; [dictionary setObject:@"A Book about the Letter C" forKey:@"C"]; 2. NSMutableDictionary remove 방법 // 전체 루프를 돌면서 각각의 아이템 삭제 작업을 해줘야합니다 for (id theKe.. 2011. 6. 2.
현재 UIView Animation Stop 방법 현재 UIView의 Animation 중이라면 특정 액션시 Stop 하는 방법에 대해서 알아보자... 간단하다..... 소스 코드를 보자 //1. 먼저 UIView Animation을 만들고 진행하자.... [UIView beginAnimations:@"test" context:itemView]; [UIView setAnimationRepeatAutoreverses:YES]; // important [UIView setAnimationRepeatCount:20]; [UIView setAnimationDuration:0.25]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(testCallt:)]; //2... 2011. 6. 2.
화면상에서 터치 이벤트 발생시 View에서 무시하기 방법 아이폰 개발시 특정 상황에서 터치 이벤트를 무시해야 할때가 있습니다. 예를 들면 파일 로딩중 등등.... 이때 간단하게 이벤트 받지 않기등을 처리할수있네영 1. Touch Event 무시하기 [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 2. 다시 Touch Event 받기 [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 출처 : http://dongss.tistory.com/entry/iOS-%EC%95%84%EC%9D%B4%ED%8F%B0-%EA%B0%9C%EB%B0%9C-%ED%99%94%EB%A9%B4%EC%83%81%EC%97%90%EC%84%9C-%E.. 2011. 6. 2.
Static Class 만드는 방법 아이폰 개발시 Static Class 만드는 방법입니다. @interface Foo : NSObject { } + (NSObject*)classVariable; @end // Foo.m #import "Foo.h" @implementation Foo + (NSObject*)classVariable { return classVariable; } @end 출처 : http://dongss.tistory.com/entry/StaticClass 2011. 6. 2.
아이폰에서 아이콘 삭제시 나오는 좌/우로 움직이는 애니메이션 효과 구현하기 이번에는 아이폰에서 아이콘을 길게 누르면 아이콘 삭제 모드로 전환됩니다. 그러면서 화면에 아이콘 이미지 삭제가 가능하게 아이콘들이 좌/우로 움직이죠,, 이러한 효과를 구현해 봅시다~!!! iphone's wobbling icon effect!!!! 긴 설명 없이 소스를 보시죠~ 설명은 추석 처리했습니다. #define RADIANS(degrees) ((degrees * M_PI) / 180.0) // iremView라는 아이콘을 가진 뷰어를 좌/우 흔들리는 애니메이션을 만들어보죠 // 좌/우 움직임에 대한 transform을 구하고~ CGAffineTransform leftWobble = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(-5.0)).. 2011. 6. 2.
iPhone Configuration Utility 를 이용한 AdHoc 배포. 아이폰 앱 개발을 완료 하고 나서, QA 를 위해서 주변 지인 분들이나, 사내 QA 팀에 앱을 배포해야 할 때가 있습니다. 이때 많이 사용하는 방법이 앱을 AdHoc 방법으로 배포를 하는 것입니다. (AdHoc 배포 파일을 만드는 방법은 여러 다른 분들께서 설명을 많이 해 주셨으니, 이번 포스팅에선 넘어갑니다. ) 그런데 이 AdHoc 배포가 여간 불편한게 아닙니다. 저도 그동안 AdHoc 파일을 iPhone 에 설치 하기 위하여 아래 와 같은 절차를 밟았습니다. AdHoc 파일을 다운로드 받는다. 아이폰과 동기화 되어 있는 iTunes에 설치한다. 아이폰과 동기화 한다. 위 절차가 번거로운 이유는 2번 때문입니다. 꼭 동기화 되어 있는 iTunes 가 필요하기 때문이지요. 하지만, 이번에 소개하는 툴을.. 2011. 5. 27.
디바이스 메모리 체크 간단하게 메모리맄 체크하실때는 프리메모리만 따로 계산해서 사용하셔도 무방합니당; 출력은 각자 맘껏 바꾸세용 ㅎ; #include #include #include #include void checkMemory() { mach_port_t host_port; mach_msg_type_number_t host_size; vm_size_t pagesize; host_port = mach_host_self(); host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); host_page_size(host_port, &pagesize); vm_statistics_data_t vm_stat; if (host_statistics(host_port, HOST_VM_IN.. 2011. 5. 26.
도전! 아이폰4 프로그래밍 목차 *실제 책이 아래 미리보기 이미지와 같이 600페이지 모두 풀컬러로 구성되어 있습니다 출처 : http://cre8ive.kr/ican/spreads.html 관련 사이트 : http://www.digitalnew.co.kr/ 2011. 5. 21.