TIP : OpenFlow(CoverFlow)

iOS/Tip&Tech 2010.09.05 13:56

OpenFlowTest.zip



- 클릭하는 이벤트 델리게이트 메서드에 추가
- 고정된 이미지 크기로 받아옴
- 로테이트시에 플로우프레임과 이미지 크기 변경

쓰시는 분들은..

위에 보고 따라하시고.. 따로 커스터마이징할 부분은 AFOpenFlowConstants.h 를 수정하시면 됩니당..



필요한데가 있어서.. 내 맘대로 고쳤다..

라이브러리로 쓰자니 위에 공간 영역주는부분이랑..  고정안된 이미지도 되는지 확인안해보고.. (안될거같다.. -.,-)

일단 고칠게 좀 많긴한데..

일단 내가 하는 프로젝트에서는 갖다박아놓으니 되니깐.. 일단 급한 마음에 갖다쓰자 -_-;

샘플로 만든다고 만들었는데.. 내가 어째 소덕후가 된 기분이라능..


< Portrait >


< Landscape >


2012. 04. 05. 수정


그냥 openflow보다 icarousel이게 더 나음 이거 쓰세여

http://cocoacontrols.com/platforms/ios/controls/icarousel


http://lambert.tistory.com/446


신고

'iOS > Tip&Tech' 카테고리의 다른 글

TIP : ComboBox  (0) 2011.01.12
TIP : APNS(Apple Push Notification Service)  (2) 2010.11.16
TIP : UITextField 정렬  (2) 2010.09.10
TIP : OpenFlow(CoverFlow)  (3) 2010.09.05
TIP : 아이폰 방향 상태  (1) 2010.09.05
TIP : Image Menu  (0) 2010.07.06

TIP : 아이폰 방향 상태

iOS/Tip&Tech 2010.09.05 11:28

1. 방향 상태 얻기

UIDeviceOrientation * orientation = [UIApplication sharedApplication].statusBarOrientation;
if ( UIDeviceOrientationIsPortrait(orientation) ) {
...
}
else if( UIDeviceOrientationIsLandscape(orientation) ) {
...
}
else if( orientation==UIDeviceOrientationUnknown) {
...
}

[[UIDevice currentDevice] orientation] : 아이폰이 누웠을때 UIDeviceOrientationUnknown 를 호출하기 때문에 쓰기 힘들다.

[UIDevice currentDevice] beginGenerationgDeviceOrientationNotifications];
프로그램 시작시 호출해야 시작할때부터 로테이션 상태를 얻을 수 있다.
그래도 안되면.. 나올때까지 계속 재귀적으로 호출해준다. 그러면 나온다..
while(orientation!=UIDeviceOrientationUnknown) {
  orientation= [[UIDevice currentDevice] orientation]);
}
이런식으로 해줘도 될거 같긴 한데.. 너무.. 메모리 많이 잡아먹을듯..
performSelector로 afterDelay 조금 조절해가면서 하자.. 물론 나는 0초로.. 하지만서도..


2. 방향 상태 설정하기

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientation];

@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere) // Warning 뜨니깐 추가해주자
 - (void) setOrientation:(UIInterfaceOrientation)orientation;
 @end

 
[상태바 방향 설정]

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientation animated:YES];

[시작시 로테이션 줄때]
*.plist 에서 Key값 Initial Interface orientation 에서 Value 수정(SDK 4.0이후로 plist가 바뀐듯 싶음..)

참고 : http://www.dejoware.com/blogpages/files/iphone_programming_landscape_view_tutorial.html


3. 로테이션 못받아오는 상황

(1) UINavigationController, UITabbarController 가 상위에 있는 경우
이런 경우는 하위의 ViewController에서 암만 shouldAutorotateToInterfaceOrientation에서 리턴값을 YES로 줘도 안돌아간다.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

그냥 상위 뷰컨트롤러(네비게이션컨트롤러, 탭바컨트롤러)를 서브클래싱해서 위의 함수를 오버라이딩시킨다.

참고 : http://developer.apple.com/library/ios/#qa/qa2010/qa1688.html

[하위뷰컨트롤러, 뷰에서 이벤트를 받기]
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATION_ROTATE" object:nil];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name::@"NOTIFICATION_ROTATE" object:nil];
}

- (void) viewWillDisappear:(BOOL)animated {
 [[NSNotificationCenter defaultCenter] removeObserver:self name::@"NOTIFICATION_ROTATE" object:nil];
}


(2) 기타 상황
이런 경우 못받아옴.. 크윽.. 멋대로 릴리즈하지 맙시다

VC* vc= [[VC alloc] init];
 [vc.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
 [window addSubview:vc.view];
 //[vc release];

 
2011.09.20. UIDeviceOrientationDidChangeNotification 을 이제야 알았따는건 충격과 공포
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation o = [[UIApplication sharedApplication] statusBarOrientation];
}
아이폰에서 회전은 은근히 많이 쓰인다. 암것도 모르고 시작했을때는 가로모드까지 지원하도록 만드는게 개발시간이 평소보다 1.5-2배정도는 시간이 더 걸렸다.

가로보기와 세로보기 모드의 보여주는 폭만변경된다는 가정하에서는 개발단계에서 AutoresizingMask의 특성과 개념, frame과 bounds를 제대로 구분할줄 알고 설정할줄 안다면 일일히 로테이션 메시지받고 프레임조정을 하지 않아도 그다지 어렵지 않게 조절할수있다.
신고

'iOS > Tip&Tech' 카테고리의 다른 글

TIP : ComboBox  (0) 2011.01.12
TIP : APNS(Apple Push Notification Service)  (2) 2010.11.16
TIP : UITextField 정렬  (2) 2010.09.10
TIP : OpenFlow(CoverFlow)  (3) 2010.09.05
TIP : 아이폰 방향 상태  (1) 2010.09.05
TIP : Image Menu  (0) 2010.07.06

ERROR : NSXMLParser Error

iOS/Error 2010.08.23 10:32

[NSXML initWithURL:..] 로 할때 에러날때는..
NSURLConnection 으로 일단 데이터를 받은다음에 데이터 제대로 들어왓는지 보고 바꿔주자..

1. '<' 앞에 화이트스페이스(공백, 리턴, 탭..)가 들어왔을때..
NSData > NSString로 서브스트링.. > NSData
NSString * buffer = [[NSString stringWithData:responseData encoding:NSUTF8StringEncoding];
buffer = [NSString stringWithString:[buffer rangeOfString:@"<"].location]; // 아니면 그냥 substringFromIndex로 해도 댐.
NSData * convertData = [buffer dataUsingEncoding:NSUTF8StringEncoding];

※ NSUTF8StringEncoding 아래의 경우 변환 해야댐..

2. EUC-KR.. NSXMLParser는 EUC-KR형식을 지원도 안해준다..
NSData > NSString로 인코딩 > NSData에서 또 인코딩

NSString * buffer= [[NSString alloc] initWithData:responseData encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_KR)]; // 혹은 encoding:(0x80000000 + kCFStringEncodingDOSKorean)
buffer = [buffer stringByReplacingOccurrencesOfString:@"EUC-KR" withString:@"UTF-8]; // 대소문자 알아서 구분하셈..
NSData * convertData = [str dataUsingEncoding:NSUTF8StringEncoding];

※ 이거땜에 하루종일 삽질.. 쉬밤.. 그냥 UTF-8을 쓰란 말이다.. ㅜㅜ

3. ..
뭐.. 열고닫기 잘못이거나.. 데이터를 아예 이상한걸 받아왓거나..? 1,2두개 짬뽕일 경우


그냥 옆에 맥보고 피씨에 따라쳤는데.. 오타는 셀프로 고칩시당..


=========
2011. 4. 19일 추가

NSURLConnection에서 인코딩방법 읽어올수 있었다.. 이걸로 통합적으로 관리하는 XMLParser를 만들어야할듯싶다..

근데 나 ASIHTTP에 갖다쓰는데 여기서도 있는지 한번 찾아봐야겠군.. 

요샌 다들 NSXMLParser 안쓰고 다 TB XMLParser쓰던데.. 속도가 빠른건 아는데.. 이게 따로 래핑해둔게 있어 편해서 계속 쓴다.. 크윽..

- (void) connectionDidFinishLoading:(NSURLConnection*)connection {
 NSString * strEncodingName = [response textEncodingName];
 if([strEncodingName isEqualToString:@"utf-8"])
 {
  // UTF-8
  result = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
 }
 else {
  // EUC-KR
  result = [[NSString alloc] initWIthData:receivedData encoding:-214781280];
}

신고

ERROR : Couldn't register * with the bootstrap server. Error: unknown error code.

iOS/Error 2010.07.19 20:37
[Device 모드로 설치시]
콘솔창에러 : Couldn't register * with the bootstrap server. Error: unknown error code. This generally means that another instance of this process was already running or is hung in the debugger.

상태창에러 : Program received signal: “SIGABRT”.

시뮬레이터 잘돌아가는 지 확인하고 아이폰과 맥 재부팅.
그래도 안되면.. 차례대로 디버깅해보는 수밖에


신고

ERROR : Provisioning profile ‘*' can’t be found”

iOS/Error 2010.07.13 12:19
Provisioning profile ‘*' can’t be found”

1. Organize -> Provisioning Profile -> 원하는 Provision의 Profile Identifier를 얻어오기
2. *..xcodeproj  -> 마우스 오른쪽키 -> 패키지 내용 보기
3. project.pbxproj 열기 -> PROVISIONING_PROFILE 검색 -> 해당 컴파일버전에 맞는 프로비젼 검색하여 1의 값으로 수정

.. 예전엔 그냥 프로젝트를 새로 생성했었지.. ㅜ
신고

ERROR : Code Sign error: Provisioning profile '*' specifies the Application Identifier '*' which doesn't match the current setting '*'

iOS/Error 2010.07.13 12:15
문제 )
Code Sign error: Provisioning profile '*' specifies the Application Identifier '*' which doesn't match the current setting '*'

The executable was signed with invalid entitlements. The entitlements specified in your application's Code Signing Entitlements file do not match those specified in your provisioning profile. (0xE8008016).


해결방법 )

1. File -> New File ->  Code Signing -> Entitlements -> *.plist 생성
2. Project  -> Edit Project Setting -> Build -> Code Signing -> Code Signing Entitlements -> *.plist 로 수정..

출처)
http://stackoverflow.com/questions/1410080/code-sign-error-with-xcode-3-2


잡설 )
plist가 꼬여서 생긴 문제.. 같네..
신고

TIP : Image Menu

iOS/Tip&Tech 2010.07.06 10:33
아이폰에서 이미지 메뉴를 꽤 자주쓰게 된다..

Segment Control을 가지고 어떻게 만들어보려고 했는데..

하다보니 이건 아니다 싶어 기냥 따로 만들었다..

첨엔 컨트롤을 서브클래싱해서 할까 하다가.. 그냥 뷰에서 터치이벤트만 받아도 문제없이 구현되더라고..

가로로 가는 메뉴만 구현햇다..

아직 세로로는 쓸일이 없어서..




사용법..

1. 뷰에 추가하기.
ImageMenu * menu = [[ImageMenu alloc] initWithFrame:CGRectMake(0.0, 0.0, 320, HEIGHT_IMAGE_MENU)
information:[NSArray arrayWithObjects:@"tab_01.png", @"tab_02.png", @"tab_03.png", nil]];
[menu addTarget:self action@selector(selectMenu:)];
[self.view addSubview:menu]
[menu release];

2. 선택시 이벤트.
- (void) selectMenu: (id) sender {
switch([sender index]) {
case 0:break;
case 1:break;
..
}
}

신고

'iOS > Tip&Tech' 카테고리의 다른 글

TIP : ComboBox  (0) 2011.01.12
TIP : APNS(Apple Push Notification Service)  (2) 2010.11.16
TIP : UITextField 정렬  (2) 2010.09.10
TIP : OpenFlow(CoverFlow)  (3) 2010.09.05
TIP : 아이폰 방향 상태  (1) 2010.09.05
TIP : Image Menu  (0) 2010.07.06


티스토리 툴바