요구사항에 따라 아이폰에 토스트 팝업을 만들일이 생겼다. (아이폰에 토스트 팝업이라니!!!)

그래서 여러 고민 끝에 결론은

어디에서나 화면에 보이는 UIWindow내에 UIView를 삽입하여 화면에 띄우고 애니메이션으로 출력후 종료하도록 하였다.

뷰를 삽입 후 애니메이션으로 출력, 종료까지 잘되었지만 발목을 잡은 것은 바로 회전이였다.

회전을 하게 되면 UIViewController에서 표시되는 뷰와 따로 놀게되고 회전할때도 각각 돌아가게되어 뷰의 모습이 깨지게 되었다.

확인 끝에 중요한 차이점을 알게 되었다

바로 뷰를 삽입하는 방식인다. 기존방식은 새로운 UIWindow를 생성하여 UIView를 입력하는 방식이다.

- (void) makeAlertWindow {

    UIWindow * statusWindow =[[UIWindow alloc]initWithFrame:self.bounds];

    statusWindow.windowLevel = UIWindowLevelAlert;

    statusWindow.hidden = NO;

    statusWindow.backgroundColor = COLOR_CLEAR;

    statusWindow.userInteractionEnabled = NO;

    [statusWindow makeKeyWindow];

    [statusWindow addSubview:self];

    self.alertWindow = statusWindow;

    [statusWindow release];

}


이렇게 만들고나서 회전문제를 처리하려고하니 위와 같은 많은 문제점이 생겼다. 

찾아본 결과 간단한 해결방법이 있었다.

- (void) makeAlertWindow {

    ///< 뷰를 윈도우에 추가하기 위해서 써야한다!!!!!    

    [[[UIApplication sharedApplication] keyWindow] addSubview:self];

}


이렇게 UIView를 삽입하고 나면 UIViewController의 회전과 UIView의 회전이 일치하게 되어 회전 문제를 처리하기 쉽게 되었다.

첨부파일로 소스 전체를 올린다.

'iOS' 카테고리의 다른 글

UITableViewCell 다루기  (0) 2012.02.06
TCP Dump  (0) 2011.12.29
UITableViewCell Custom 오른쪽 화살표 버튼 이미지  (0) 2011.12.27
유용한 오픈소스 링크  (0) 2011.12.21
ActionSheet 버튼 스타일 변경작업  (0) 2011.12.16
KeychainItemWrapper 의 역할은 아이폰내 키체인에 보다 쉽게 계정을 저장하기 위한 wrapper이다.

사용 방법은 생각보다 간단한데 주의해야 할점은 초기화 할때 입력하는 identifier 값이 키체인의 영역을 구분하는 키 역할을 하는 부분인데

이때 입력되는 키체인의 속성에 따라 충돌이 발생되 오류가 나는 현상이 있다.

만약 한 앱에 2개 이상에 대한 패스워드를 키체인에 저장할 때는 반드시 주의해서 사용해야한다.

SAKeychainItemWrapper * item = [[SAKeychainItemWrapper alloc] initWithIdentifier:key accessGroup:nil];

    [item setObject:value forKey:(id)kSecValueData];

    [item release];



key : 키체인의 영역을 구분짓는 키
value : 저장되는 값

문제는 2개 이상의 계정에 대해 저장할 때 key 체인의 값이 계정에 따라 다르더라도 두번째 계정 비밀번호를 입력할 때 오류가 발생되었다.

(동일 아이템이 존재하여 입력이 안된단다)

분명 identifier 키가 다른데 왜 충돌이 날까? 그렇다고 중복된것이 있다면서 업데이트 역시 제대로 되지 않았다.

구글링을 한 결과 알아낸 사실은 kSecAttrAccount, kSecValueData 있었다.

wrapper를 사용하여 초기화할 때 kSecClassGenericPassword 속성이 들어가게 되는데 이 속성은

kSecAttrAccount가 유니크해야한다는 것이다. 이 사실을 모르고 아무리 비밀번호를 입력하니 오류가 발생된것이었다.

보통 아이디와 비밀번호 둘다 키체인에 저장하기 때문에 문제가 발생이 안되겠지만

현재 개발하는 프로젝트는 동일 아이디에 비밀번호가 다른 경우도 발생할수 있기 때문에 비밀번호만 키체인에 저장하려고 하니 문제가 발생한 것이었다

즉 해결하기 위해서 kSecAttrAccount 값에 패스워드의 identifier 값을 입력하므로써 각 계정간 유니크성을 유지하여 해결 할수 있었다.

SAKeychainItemWrapper * item = [[SAKeychainItemWrapper alloc] initWithIdentifier:key accessGroup:nil];
    [item setObject:key forKey:(id)kSecAttrAccount];
    [item setObject:value forKey:(id)kSecValueData];
    [item release];


참고 : http://useyourloaf.com/blog/2010/4/28/keychain-duplicate-item-when-adding-password.html

이번에 아이콘 변경작업을 하면서 많은 일이 생긴것 같다. 이번 기회에 제대로 당한듯 ㅠㅠ


보통 아이콘 설정에는 

Icon file
CFBundleIconFiles

두 항목에서 설정할 수 있다.
이번에 아이콘을 변경하면서 위 두항목을 모두 변경하고 난 뒤 앱스토어에 등록을 하였는데 오류가 발생하여 거절당했다
원인은 CFBundleIconFile 부분에 디렉토리 명을 삽입하였는데 그 부분이 문제였다.

아이콘 파일이 많아 resource 디렉토리 밑에 디렉토리를 하나 생성하여 넣은 후 프로젝트에 추가를 시켜 놓았는데 상대 경로로 입력해야 되는 걸로 알고 디렉토리명을 넣었다가 오류가 난것이였다(하지만 시뮬레이터와 디바이스에 테스트 할땐 제대로 돌아간다!!!! -_-). 즉 소스내 이미지 파일을 사용하듯 설정 부분에서도 아이콘 명만 기입해야 했었다! -_-;;; 생각해보니 아카이빙할 때 디렉토리라는 개념이 없이 하나의 패키지로 담는데 경로를 지정하니 당연히 제대로 읽지 못하는 것이었다.

거절 이후 원인을 찾아 해결 한 후 다시 앱스토어에 등록을 하였는데.... 이런! 아이폰4에서 아이콘이 흐릿하게 나오는 것이 아닌가? 아마도 아이폰3 아이콘이 나오는것 같았다(@2x.png 이미지가 제대로 안먹힌 것 같았다)

수소문 끝에 원인을 찾아보니 xml 설정에 문제가 있었다.


저렇게 설정해도 빌드에는 문제가 안되지만 아마 CFBundleIconfile항목아래에 있는 Icon.png 파일을 읽어들여 뿌리는것 같다. 즉 아이폰 4에서도 아이폰 3아이콘이 나오는 이유는 저부분이였다. 즉 아래의 기종에 따른 아이콘 설정들이 적용이 안되는 것이다. -_-;

원인이 되는 부분은 key 항목의 Icon files 부분이였다. 저렇게 해도 빌드에는 문제가 안되지만 아래 설정을 깔끔하게 무시하는것 같다.

수정은 Icon files를 CFBundleIconFiles로 변경하니 제대로 아이콘이 적용되었다.


아 정말... 힘들다 ㅠㅠ 단순한 아이콘 설정에도 이렇게 예외상황이 많을 줄이야 ㅠㅠ



1. QuartzCore 프레임워크를 추가한다

2. 헤더에 QuartzCore를 추가한다.

2. 해당 view, button 객체에 아래와 같이 작업을 해준다

둥근 모서리 : [button.layer setCornerRadius:0.0f]
테두리 두께 : [button.layer setBorderWidth:2.0f]
테두리 색 :
UIColor * boarderColor = [[UIColor alloc] initWithRed:xxxx green:xxx blue:xxx alpha:xxx];
[button.layer setBorderColor:[boardercolor CGColor]]

'iOS' 카테고리의 다른 글

아이폰 아이콘 설정 주의사항  (0) 2011.03.11
아이폰 개발 유용팁  (0) 2011.03.11
userInteractionEnabled 영향  (0) 2011.03.04
NSMutableArray 생성 방법  (0) 2011.03.02
Objective C Delegate 활용  (0) 2011.02.24

+ Recent posts