2012-01-06 3 views
1

는 나 자신이 많이 일을 찾을 : iOS에서 UI 요소를 더 짧은 방법으로 이동할 수 있습니까?

webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height); 

은 분명히이 많은 코드가 반복된다. 난 요소를 아래로 이동하지만, 나는 속성에 직접 액세스 할 수 없기 때문에 새로운 CGRect를 만들어야합니다.

런타임에 요소를 놓치는 쉬운 방법이 있습니까?

답변

4

아니 완전히 다른 방식으로,하지만 당신이 저를 요구하는 경우에 더 편안한 하나

 
CGRect newRect = webView.frame; 
newRect.origin.y = otherView.frame.size.height+10; 
webView.frame = newRect; 

나는이 찾을뿐만 아니라 방법이 더 읽을 수 있습니다. 이 특정 예에서 약 40 % 적은 문자입니다! : p

0

@wasabii는 코드 양을 줄이는만큼 정확한 대답을 가지고 있지만 또 다른 접근 방법은 UIView에서 카테고리를 만드는 것입니다. 다음은 카테고리에 대한 문서입니다. http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

기본적으로 카테고리를 사용하면 제어 할 수없는 클래스 (또는 제어 할 수도있는 클래스)에 기능을 추가 할 수 있습니다.

Xcode 4.2는 새 파일 대화 상자에서 범주를 만들기위한 템플릿을 제공하므로 가능한 경우이를 사용하십시오. 당신이 방법에 UIView의 카테고리를 만들 수 있습니다이 경우

그런 다음 이동 코드 그러나 당신이 좋아하는 (그러나 정말 wasabii의 방법 @ 사용)를 구현
-(void)moveDownByIncrement:(float)increment 

을했다. 카테고리에 대해 명심해야 할

몇 가지 :

  1. 들은 클래스 자체에 영향을 미치는, 그래서 당신이 범주에 메소드를 추가 할 때 사용할 응용 프로그램은 넓다.
  2. 카테고리 헤더를 가져 오지 않았거나 (클래스 또는 사전 처리에서 가져 오기) 카테고리 메소드를 호출하려고하면 오류가 발생하거나 프로젝트 설정에 따라 경고가 표시됩니다.
  3. 범주는 충돌을 일으킬 수있는 네임 스페이스로 정의됩니다. 이를 피하는 가장 좋은 방법은 추가하는 모든 접두사 (및 범주 이름 자체)에 프로젝트 고유 접두어를 접두사로 붙이는 것입니다. 많은 써드 파티 라이브러리와 오픈 소스 프로젝트는 NSData에서 - (NSString *) base64EncodedString이라는 카테고리를 사용하므로 두통을 피하고 그 방법에 자신의 카테고리에 접두어를 붙이십시오.
  4. 카테고리의 속성 또는 ivars를 설정하는 것이 가장 번거롭고 자신 만의 토론이 필요합니다. 당신이 그것을하는 방법을 모르는 경우에 그것을 시도하지 말라!
2
view.frame = CGRectOffset(view.frame, 5, 10); 
관련 문제