2013-07-25 336 views
0

我在雙擊時縮小UIScrollView中的UIImageView。在Interface Builder中設置時可以正常工作。我在這裏看到的魔術是,當我放大/縮小時,scrollViewcontentSize自身增加/減少。我檢查contentSizeviewDidLoad,它不是零。UIScrollview ContentSize魔術

我試圖通過從IB刪除scrollViewimageView並通過編程創建它們。在添加imageViewtapGestureRecognizer後,我無法在此處縮放。當我檢查原因時,contentSize到處都是零。

當我將它們添加到IB/xib中時,我無所作爲contentSize。我沒有把它放在任何地方。我覺得它很好,contentSize自動調整我需要的地方。但是,當我以編程方式創建scrollView時,它不會被複制。

如何讓它工作?我歡迎你的建議。

這是我參考的代碼。在IB創建

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; 
    [doubleTap setNumberOfTapsRequired:2]; 
    [imageView addGestureRecognizer:doubleTap]; 
    imageScrollView.minimumZoomScale=1.01; 
    imageScrollView.maximumZoomScale=5; 
    imageScrollView.zoomScale=1.01; 
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width); 
} 

的NSLog

滾動型說

height = 449.479767 width = 320.000000 

滾動型創建編程

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; 
    [doubleTap setNumberOfTapsRequired:2]; 
    [imageView addGestureRecognizer:doubleTap]; 
    imageScrollView.minimumZoomScale=1.01; 
    imageScrollView.maximumZoomScale=5; 
    imageScrollView.zoomScale=1.01; 

    [self.view addSubview:imageScrollView]; 
    [self.imageScrollView addSubview:imageView]; 
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width); 
} 

的NSLog說

height = 0.000000 width = 0.000000 
+0

無論通過IB工作可以通過代碼programatically.See來完成,如果某個地方參考了正確deleagtes正常等設置 –

回答

1

這些屬性

self.minimumZoomScale=1.01; 
self.maximumZoomScale=5; 
self.zoomScale=1.01; 

應該是你的滾動視圖的屬性:

imageScrollView.minimumZoomScale=1.01; 
imageScrollView.maximumZoomScale=5; 
imageScrollView.zoomScale=1.01; 

然後還需要設置contentSize屬性(使用IB時,你不需要設置它,因爲它是從xib文件加載):

imageScrollView.contentSize = CGSizeMake(width,height); 

使用適當的值。

另外,你需要設置代理:

imageScrollView.delegate = self; 

和至少一個委託方法指示放大其子視圖:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return scrollView.subviews[0]; 
} 

(實際上是你最好的子視圖設置變量或將其分配給屬性以獲取對其的引用,因爲scrollViews也具有內置子視圖)

0

是否在xib中啓用了自動佈局?如果是這樣,IB在圖像視圖和滾動視圖之間設置約束,並且在運行時自動佈局使用約束來設置滾動視圖的內容大小。當您在代碼中創建視圖時,您沒有添加足夠的約束,也沒有直接設置內容大小,因此內容大小保持爲零。

閱讀Tech note TN2154瞭解更多信息。

+0

不,未啓用。 – iOS