2011-03-13 4 views
1

다른 UIScrollView의 UIScrollView에 UIImageView가 있습니다 (Apple의 PhotoScroller sample code 기준). 이미지보기이 방법은 실행 후 바로 다른 위치로 이동하지만, scollViewDidClose 방법이 도달하기 전에 :왜이 UIImageView 자체 자동 집계입니까?

- (void)dismiss { 
    [scrollView removeFromSuperview]; 
    ImageScrollView *isv = [self currentImageScrollView]; 
    UIImage *image = isv.imageView; 
    image.frame = [self.view convertRect:image.frame fromView:isv]; 

    [self.view insertSubview:image belowSubview:captionView]; 
    [(NSObject *)delegate performSelector:@selector(scrollViewDidClose:) 
           withObject:self 
           afterDelay:2.0]; 
} 

지금 여기에 이상한 부분 다음있는 UIScrollView 다시 자체를 기각의 컨트롤러에 호출 할 때,이 메소드를 호출 대리인에게 전화했다. 이미지가 새로운 수퍼 뷰보다 크면 왼쪽 가장자리가 수퍼 뷰의 왼쪽 가장자리와 정렬되도록 점프됩니다. 새로운 슈퍼 뷰보다 작 으면보기의 가장 중앙으로 점프합니다. 이 변경 사항에 애니메이션이 없습니다.

제 궁금한 점은 어떻게하면 그것을 막을 수 있습니까? 수퍼 뷰 (self.view) 클래스와 이미지 뷰 클래스를 모두 조정하여 호출 할 수있는 메서드를 확인했습니다. 이 메서드가 호출 된 후 이미지 뷰에는 프레임이나 가운데가 설정되지 않고 layoutSubviews 메서드가 슈퍼 뷰에서 호출되는 동안 이 아닌 이미지가 슈퍼 뷰의 가운데 또는 왼쪽으로 이동합니다. 또한 수퍼 뷰에서 autoResizesSubviews을 끄고 이미지보기의 autoresizingMaskUIViewAutoresizingNone으로 설정하여 동작을 변경하지 않았습니다.

그렇다면 왜 그런 일이 벌어지고 있으며, 그 이유는 무엇입니까? 더 중요한 것은, 어떻게 멈추게할까요?

나는 며칠 동안 내 머리를 때렸다. 모든 조언이나 안내가 크게 감사 할 것입니다.

+0

올바른 코드를 게시하지 않았습니다. UIScrollView에는 imageView 속성이없고 UIImage에는 프레임 속성이 없습니다. – Darren

+0

대런 - 저는 Apple의 [PhotoScroller example code] (https://developer.apple.com/library/ios/samplecode/PhotoScroller)에 기반한 UIScrollView의 하위 클래스를 사용하고 있습니다.이 이미지 뷰어에는 I 단순히 접근자를 추가했습니다. – theory

+0

클래스를'ImageView' 속성으로 하위 클래스 인'ImageScrollView'로 변경했습니다. 그 자리에 고마워. – theory

답변

1

ImageScrollView은 UIImageView를 중심으로 한 것입니다. ImageScrollView layoutSubviews에 중단 점을 설정하면 UIImageView가 중앙에 배치되는 방법을 알 수 있습니다.

ImageScrollView 님의 내부 주소는 imageView이며 다른보기에 배치하고 있습니다. ImageScrollView이 여전히 해당 UIImageView 인스턴스의 소유권을 보유하고 있으며 여전히 레이아웃을 관리하고 있기 때문에 작동하지 않습니다.

이미지를 다른 UIImageView 인스턴스로 복사해야하거나 imageView의 소유권을 양도 할 수 있도록 ImageScrollView을 변경해야합니다.

+0

'ImageScrollView'에 플래그를 설정하여'layoutSubviews'가 내 'UIScrollView' 하위 클래스에서 아무 것도하지 않고 돌아 오도록 시도했습니다. 아무런 효과가 없습니다. 이미지는 여전히 중앙에 위치합니다. 또한 예제 코드에서는 ImageScrollView가 포함 된 UIScrollView가 슈퍼 뷰에서 제거됩니다.사실,'layoutSubviews'는 전혀 호출되지 않습니다. 적어도'-dismiss' 메소드가 실행을 마친 후에는 아닙니다. 나는 그걸 좀 더 속일거야,하지만 난'layoutSubviews'가 여기있는 범인이 아니라는 것을 확신한다. - 부모 UIScrollView가 원인이 아니면. 다음에 그것을 확인해야합니다. – theory

+0

그냥 들떠, 기쁨이 없습니다. :-('scrollView'는 슈퍼 뷰에서 제거되어'layoutSubviews'가'scrollView'' UIScrollView' 또는'ImageScrollView'에서 호출되지 않도록합니다. 적어도이 코드가 실행 된 후에는 호출되지 않습니다. 그러나 이미지가 세로로만 움직이는 것이 아니라 가로로만 움직이는 것에주의를 기울였습니다 .Hrm. 중심에있는 코드가 내 "dismiss"메서드보다 먼저 호출되기도하지만 나중에 그 영향이 발생합니까? 이것에 의해 ... – theory

+0

좋아, 그냥 다시 가서 청소하고 네 말이 맞다는 것을 발견 했어, 대런. 오, 이런. 마침내이 이슈를 핥아서 다행이야. 대답 해 주셔서 고맙습니다. – theory

1

'이미지'보기의 프레임을 하위보기로 삽입 할 때 프레임을 설정하지 않습니다. 뷰를 스크롤 뷰의 특정 위치에 표시하려면이를 명시 적으로 지정해야합니다.

+0

고마워, 그게 분명해 보이지? 나는 예제를 너무 단순하게 만들까 봐 걱정했다. 안타깝게도 실제로이 코드에서 프레임을 모든 종류 *로 설정했습니다. 그것은 내가 넣은 곳이라도이 메소드가 실행을 끝내면 즉시 새로운 슈퍼 뷰의 중심으로 즉시 이동합니다. 이 슬픈 상태를 반영하기 위해 예제 코드를 업데이트했습니다. – theory