최초 작성일 : 2012/09/24 17:57 


지금 아이폰5 해상도에 맞춰 UI를 수정하고 있는데

기존에 xib에 구현해놓았던 이미지 뷰가  암만 frame으로 사이즈를 바꾸려고 해도

적용되질 않는다.


그런데 같은 소스로 시뮬레이터의 레티나 3.5인치로 하면 frame으로 사이즈 변경이 된다.

물론 xib파일은 3.5인치용과 4인치용이 다르지만...


바로 이 3.5인치용과 4인치용 xib 파일이 다르다는 점을 찾았고

그 안에서 오직 차이 나는 한 부분...xib 파일에 있던 constraints를 발견했다.

문제는 이 constraints가 삭제가 안된다는 점이다.


결국 해당 이미지뷰를 xib에서 지우고 코딩으로 생성하여 처리했더니

양쪽(3.5인치와 4인치) 모두에서 정상적으로 frame이 변경 되었다.





3줄요약

1. xib에 설정한 이미지뷰가 레티나 4인치에서 frame 조정 안됨

2. xib의 constraints가 수상한데 삭제가 안됨

3. xib에서 이미지 뷰 삭제하고 코딩으로 했더니 됨


추가 : constraints 정보 지우는 방법

xib -> view 정보 Interface Builder Document -> Use Autolayout 체크를 없애면 됨







블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/14 19:06


View Window에서 label을 클릭하였을 경우 Inspector 창을 통해 볼 수 있는 내용들




참조 Outlet은 File's Owner인 MyViewController와 연결됨




label 컨트롤에서 오른 마우스버튼을 클릭하여서도 설정 가능함




Identity Inspector를 통해 볼 수 있는 설정들



블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/14 18:59


View Window에서 TextField를 선택한 경우
Attribute Inspector의 placeholer에 기본 문자열로 Hello, World!가 설정되어있고
기타 텍스트필드의 속성들이 설정되어있다.




Connection Inspector에는 delegate에 대한 연결과 textField에 대한 참조 연결이 모두
File's Owner 즉, MyViewController로 연결되어있음을 알 수 있다.




연결 설정은 View Window에서 TextField를 오른쪽 클릭하여 설정할 수도 있다.




Identity Inspector를 통해 클래스 이름과 접근 설정을 확인할 수 있다.



블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/14 18:45


MyViewController의 부모 클래스인 UIViewController에서 사용되어
애플리케이션의 화면 구성(배경 이미지 출력 등)을 처리한다.

Document Window에서 View를 선택한 화면




View의 Attribute Inspector





View의 Connection Inspector - 참조 Outlet이 File's Owner와 연결되어있고 File's Owner는
MyViewController이므로 결국 이 View는 MyViewController에서 사용된다.




View의 클래스는 UIView이며 사용자와 상호작용 할 수 있도록 설정되어있음




View Window에서 배경 이미지를 클릭한 경우...




Attribute Inspector에서는 image 속성에 백그라운드 이미지로 사용된 파일명이 보인다.




Identity Inspector에는 클래스명에 UIImageView가 표시되고 역시 사용자와 상호 작용
가능하도록 설정 되어있다.



블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/13 09:55


First Responder는 런타임시 현재 사용자와 상호작용하는 객체로 사용자가 인터페이스와
상호작용할 때마다 바뀐다.










블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/13 09:43


Interface Builder의 메인 창에서 File's Owner를 선택한 경우의 화면들

nib 파일이란?
Nib는 코코아 어플리케이션에서 사용하는 파일로 인터페이스빌더에서 생성한 
윈도우, 메뉴, 컨트롤과 사용자가 만든 오브젝트들의 레이아웃과 속성등의 정보와 
오브젝트간의 연결과 바인딩등의 정보를 포함하고 있는 파일입니다.

nib 파일 로딩
nib 파일은 로딩 시에 아래와 같은 순서로 처리됩니다.

1) 메모리 로딩 
해당 Nib에 등록된 오브젝트, 관련된 리소스(이미지, 사운드 파일등)를 
메모리 또는 캐쉬로 불러 옵니다.

2) 오브젝트 Unarchive
nib에 냉동포장 되어있던 오브젝트들을 해동합니다. 인터페이스 빌더의 오브젝트들에게는 
initWithCoder 메시지를 발송하며, NSView의 서브클래스들에게는 initWithFrame, 
그외 오브젝트들에게는 init 메시지를 발송합니다. 그리고 인터페이스 빌더에서 설정한 정보에 따라 
오브젝트들간의 연결(actions, outlet)과 바인딩을 설정합니다.

3) awakeFromNib
nib내의 모든 오브젝트들에게 awakeFromNib 메시지를 발송하여, 
오브젝트가 생성이 완료되었음을 알립니다. nib내의 오브젝트들은 
이 메시지를 이용하여 초기화와 관련된 처리를 할 수 있습니다.

그리고 nib내의 윈도우중에 인터페이스 빌더의 Window/Behavior내의 
'Visible at Launch' 속성이 체크되어 있는 윈도우를 오픈합니다.

참조 : OSX에서 Cocoa 맛보기(http://www.cocoadev.co.kr/175)

- File's Owner는 어떤 xib 파일에서든 항상 첫 번째 아이콘이고 
  디스크에서 로드된 xib 파일 객체를 나타낸다.

- File's Owner는 Interface Builder에 기본적으로 포함되면 임의로 삭제/수정 불가능

nib 파일을 로드하고 소유한 객체. 
(MainWindow.xib를 UIApplication 객체가 로드하기 때문에, MainWindow.xib의 File's Owner 객체는 UIApplication 객체임)
- nib 파일은 로드될 때 nib 파일 내에 기술된 것을 그대로 객체화 함
- 메모리에 생성된 nib 객체와, 이를 로드한 객체간의 연결을 위해 File's Owner 가 존재함
- 한 프로젝트에는 여러개의 nib 파일이 존재할 수 있고, nib 파일을 어떤 객체가 로드했느냐에 따라 File's Owner 객체는 다를 수 있음

[출처] iPhone 기초 2.|작성자 일리




현재는 HelloWorld.xib를 Interface Builder에서 연 상태이고 이 상태에서의 File's Owner는
MyViewController로 표시된다.
(xcode의 Groups & Files에서 MainWindow.xib 파일을 Interface Builder에서 열면
File's Owner는 UIApplication 클래스가 된다)

따라서 Outlet은 MyViewController에서 사용되고있는 label, textField가 보여지며
searchDisplayController와 view는 MyViewController의 부모 클래스인 UIViewController에서
사용되는 Outlet이다. 

또한 Referencing Outlet에는 delegate와 textField를 의미하는
RoundStyleTextField가 연결 되어있는데 이는 MyViewController가 UITextFieldDelegate
프로토콜을 따른다고 선언(MyViewController.h)한 것에 대한 표현이다.




Identity Inspector에는 Class Identity 항목에 다음과 같이 xib 파일의 소유자가 되는
클래스가 표시된다.




블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요

최초 작성일 : 2010/03/12 19:17


1. Object 탭 : 각종 UI Controller Object들을 모아놓은 팔레트




2. classes 탭 : 프로젝트 관련 클래스들의 목록




하단에는 선택한 클래스의 상속 관계가 표시된다.
UIViewController 클래스를 선택한 경우 NSObject, UIResponder, UIViewController가
차례로 보여진다.

샘플 코드 중 MyViewController를 선택한 경우에는 아래와 같이 보인다.





3. Media 탭 : 프로젝트에 사용된 멀티미디어 리소스 목록



블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요