簡體   English   中英

UIScrollview ContentSize魔術

[英]UIScrollview ContentSize magic

我雙擊雙擊UIScrollViewUIImageView 在Interface Builder中設置它時,效果很好。 我在這里看到的魔術是,當我放大/縮小時, scrollViewcontentSizescrollView增加/減少。 我在viewDidLoad檢查contentSize ,它不為零。

我試圖通過removiing的相同scrollViewimageView來自IB,並創造了他們編程。 加入后imageViewtapGestureRecognizer ,我在這里未能放大。 當我檢查原因時, 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

@Pheel給出了類似的答案,即使用編碼在滾動視圖內縮放圖像。

答案的鏈接如下:

iOS:在滾動視圖中添加imageview以進行縮放

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM