[英]UIScrollview ContentSize magic
我雙擊雙擊UIScrollView
的UIImageView
。 在Interface Builder中設置它時,效果很好。 我在這里看到的魔術是,當我放大/縮小時, scrollView
的contentSize
會scrollView
增加/減少。 我在viewDidLoad
檢查contentSize
,它不為零。
我試圖通過removiing的相同scrollView
和imageView
來自IB,並創造了他們編程。 加入后imageView
和tapGestureRecognizer
,我在這里未能放大。 當我檢查原因時, contentSize
在任何地方都保持為零。
當我將它們添加到IB / xib中時,我對contentSize
卻不執行任何操作。 我沒有在任何地方設置它。 我發現它的工作正常, contentSize
在需要的地方自動調整。 但是,當我以編程方式創建scrollView
時,它不會復制。
我該如何運作? 我歡迎您的建議。
這是我的代碼供參考。
在IB中創建的ScrollView
- (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
ScrollView以編程方式創建
- (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
這些特性
self.minimumZoomScale=1.01;
self.maximumZoomScale=5;
self.zoomScale=1.01;
應該是您的scrollView的屬性:
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也具有內置的子視圖)
是否在xib中啟用了自動布局? 如果是這樣,則IB將在圖像視圖和滾動視圖之間設置約束,並且在運行時自動布局會使用約束來設置滾動視圖的內容大小。 在代碼中創建視圖時,您沒有添加足夠的約束並且沒有直接設置內容大小,因此內容大小保持為零。
有關更多信息, 請閱讀技術說明TN2154 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.