2009-09-18 25 views
5

Tôi không thể tìm thấy câu trả lời cho vấn đề này mà tôi đang gặp phải.Trung tâm UIImageView bên trong UIScrollView mà không có contentInset?

Tôi có UIImageView bên trong UIScrollView và tôi muốn căn giữa nội dung theo chiều dọc.

Ngay bây giờ, cách duy nhất tôi có thể làm điều này là bằng cách đặt nội dung của chế độ xem cuộnTrong bối cảnh dựa trên chiều cao của kích thước UIImageView, nhưng đây không phải là giải pháp hoàn hảo; nó chỉ làm tăng kích thước của UIImageView, làm cho UIScrollView 'nghĩ' nội dung của nó lớn hơn và thêm các thanh màu đen này lên trên cùng.

tôi đã cố gắng để có được sự giúp đỡ từ:

UIScrollView with centered UIImageView, like Photos app

Center content of UIScrollView when smaller

Nhưng đã không thể để giải quyết nó sử dụng những câu trả lời.

+0

Tôi cũng vật lộn để tìm cách khắc phục cho việc này. Có vẻ như không có cách đơn giản nào để căn giữa nội dung của một scrollView. – Jonah

+0

Đã được trả lời chưa? – JoePasq

Trả lời

1

Tạo một UIView riêng biệt và thêm UIImageView làm trung tâm trong việc này, sau đó thêm các điểm đến scrollview

UIView *view = [[UIVIew alloc] initWithFrame:<frame that will fill your scrollview>]; 
CGRect frame = CGRectMake((view.size.width - IMAGE_WIDTH)/2, (view.size.height - IMAGE_HEIGHT)/2, IMAGE_WIDTH, IMAGE_HEIGHT); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 
imageView.image = [UIImage imageNamed:@"imageSized_IMAGE_WIDTH_by_IMAGE_HEIGHT.png"]; 
[view addSubview:imageView]; 
[imageView release]; 

[scrollView addSubview:view]; 
[view release]; 

Lưu ý rằng bạn sẽ cần phải thiết lập các khung nhìn được các kích thước và vị trí bạn cần trong scrollview. Phần quan trọng cần lưu ý là việc định tâm của số lần xem hình ảnh bên trong khung nhìn bằng cách sử dụng kích thước khung nhìn dưới dạng biến.

+0

Điều này sẽ hoạt động. Vấn đề là nếu hình ảnh nhỏ hơn UIView, nó sẽ cuộn một phần khỏi màn hình. Ứng dụng ảnh không cho phép điều này và trông đẹp hơn nhiều. – Jonah

+1

Vâng, tôi đã thấy vấn đề mà Jonah đang nói đến trong một số ứng dụng. Ứng dụng ONLY tôi đã thấy có thể làm những gì chúng tôi muốn là Photos.app: (Cho đến giờ, tôi chỉ tập trung hình ảnh của mình vào bên trong UIView, sau đó là kích thước hình ảnh + bất kỳ thứ gì tôi cần có nó ở giữa bên trong UIScroolView Không tối ưu, vì nó thêm các thanh màu đen ở phía trên và phía dưới Có vẻ tốt hơn một chút nếu tôi xóa các thanh cuộn (như Photos.app) – runmad

4

Bạn có thể nói UIScrollView để di chuyển đến xem cụ thể bằng cách gọi scrollRectToVisible:animated:

Ví dụ:

[myScrollView scrollRectToVisible:imageView.frame animated:YES]; 

Để tập trung nó theo chiều dọc, hãy thử này:

1) Thêm một cái nhìn trống để bạn scrollview có cùng chiều cao với contentSize của bạn.

2) Thêm UIImageView của bạn đến trung tâm của emptyView

2) scrollRectToVisible trên trống quan điểm này.

+0

ảnh chụp màn hình bị hỏng – Besi

0

này có thể giúp

myImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/autoresizingMask

cơ bản những gì bạn có thể làm với autoresizingMask là bạn có thể kiểm soát việc "neo" của quan điểm cho rằng, trong quan điểm mẹ của nó, cũng giống như khi bạn đang sử dụng Interface Builder

0

contentInset không nên thay đổi contentSize, nó sẽ thay đổi contentOffset.

Thử đặt contentSize, sau đó là contentInset. Ngoài ra nhìn vào màu nền của UIScrollView và những gì có thể được hiển thị phía sau nó. Tôi không gặp vấn đề gì với việc định tâm UIImageView trong UIScrollView bằng setContentSize, setContentInset và addSubview.

1

Apple đã phát hành video phiên WWDC 2010 cho tất cả các thành viên của chương trình nhà phát triển iPhone.Một trong những chủ đề được thảo luận là cách họ tạo ứng dụng ảnh !!! Họ xây dựng một bước ứng dụng rất giống nhau từng bước và đã làm cho tất cả các mã có sẵn miễn phí.

Nó cũng không sử dụng api riêng. Tôi không thể đặt bất kỳ mã nào ở đây vì thỏa thuận không tiết lộ, nhưng đây là một liên kết đến tải xuống mã mẫu. Có thể bạn sẽ cần đăng nhập để có quyền truy cập.

http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?code=y&source=x&bundleID=20645

Và, đây là một liên kết đến trang iTunes WWDC:

http://insideapple.apple.com/redir/cbx-cgi.do?v=2&la=en&lc=&a=kGSol9sgPHP%2BtlWtLp%2BEP%2FnxnZarjWJglPBZRHd3oDbACudP51JNGS8KlsFgxZto9X%2BTsnqSbeUSWX0doe%2Fzv%2FN5XV55%2FomsyfRgFBysOnIVggO%2Fn2p%2BiweDK%2F%2FmsIXj

6

Mã này nên làm việc trên hầu hết các phiên bản của iOS (và đã được thử nghiệm để làm việc trên 3,1 trở lên, đó là tất cả những gì tôi hiện có quyền truy cập).

Nó dựa trên mã WWDC của Apple được đề cập trong câu trả lời của Jonah.

Thêm bên dưới để lớp con lại UIScrollView, và thay thế tileContainerView với quan điểm có chứa hình ảnh hoặc gạch của bạn:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    // center the image as it becomes smaller than the size of the screen 
    CGSize boundsSize = self.bounds.size; 
    CGRect frameToCenter = tileContainerView.frame; 

    // center horizontally 
    if (frameToCenter.size.width < boundsSize.width) 
     frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2; 
    else 
     frameToCenter.origin.x = 0; 

    // center vertically 
    if (frameToCenter.size.height < boundsSize.height) 
     frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2; 
    else 
     frameToCenter.origin.y = 0; 

    tileContainerView.frame = frameToCenter; 
} 
+0

Tôi đang làm việc trên một ứng dụng iPad và muốn căn giữa hình ảnh Tôi đã không phân lớp UIScrollView, thay vào đó thêm mã này để shouldAutorotateToInterfaceOrientation và nó bây giờ hoạt động tốt trong cả hai chế độ phong cảnh và chân dung. – Sushant

Các vấn đề liên quan