2010-03-01 4 views
4

따라서 인터페이스 빌더에는 두 개의 이미지 뷰 객체가 포함 된 수퍼 뷰 내에 뷰가 있습니다. 앱이 실행될 때 화면에서 해당보기를 이동하여 원하는 위치로 이동하도록 애니메이션을 적용 할 수 있습니다. 뷰는 인터페이스에 대한 .h 파일의 pictureFrame으로 설명되며 출력 pictureFrame에 매핑 된 뷰가 있습니다. 현재 내 viewDidLoad는 다음과 같습니다.iPhone dev - viewDidLoad의 뷰 위치 설정

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 
} 

그러나 작동하지 않는 것 같습니다. 이 문제를 어떻게 해결할 수 있습니까?

+3

-290이 오프 스크린이라고 가정하지 마십시오. 그것은 영원하지 않을 것입니다. 그 숫자를 화면 경계에서 계산하십시오. http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen.html#//apple_ref/occ/instp/UIScreen/bounds –

답변

16

당신은 당신의보기의 프레임을 설정하는 것을 잊지 :

CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 

이를 추가하고 좋은 위치 :

self.pictureFrame.frame = theFrame;

+0

나는 같은 문제가 있습니다. ImageView 대신보기를 사용합니다. 뷰를 스크린으로 옮기는 메소드와 그것을 옮기는 메소드를 만들었습니다. 그래서 뷰를 숨겨진 애니메이션으로 숨길 수 있습니다. 이 두 액션은 버튼에 할당 될 때 완벽하게 작동하지만 viewDidLoad 메소드에서 호출 할 때는 작동하지 않습니다. 기이 한 일은 호출 후 NSLog를 추가하고 view.frame.origin.y 속성을 요청하면 반환하는 float가 정확하다는 것입니다. 즉, origin.y가 업데이트되었지만 뷰가 여전히 .nib 파일에 넣었습니다.). 나는 Xcode를 사용하고있다. 4.6.3 – RoberRM

+0

좋아, 나는 그 대답을 거의 즉시 발견했다. 보기를 이동하려면 viewDidLoad에서보다는 viewDidAppear에서 수행하는 것이 더 낫습니다 (@rob mayoff의 답변에서 완벽하게 설명 됨 : http://stackoverflow.com/questions/9476227/). view-layer-frame-in-viewdidload 할 수 없습니다). – RoberRM

1

나는 이런 종류의 일을 하나의 라이너로하는 경향이 있습니다. 내가 돌아가서 나중에 읽으면 무슨 일이 일어나는지 기억하기가 더 쉽다.

또한 내 코드에서 마법 번호를 유지하기 위해 #보기 오프셋을 정의하는 것을 선호합니다.

#define kPictureFrameHorizontalOffset -290 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.pictureFrame.frame = CGRectMake(self.pictureFrame.frame.origin.x + 0, 
             self.pictureFrame.frame.origin.y + kPictureFrameHorizontalOffset, 
             self.pictureFrame.frame.size.width + 0, 
             self.pictureFrame.frame.size.height + 0); 
} 

좀 더 자세한 정보가 부여되었지만 잘 작동합니다.