UIScrollViewに追加される複数の画像の間にギャップ/スペースを追加するにはどうすればよいですか?UIScrollViewの画像間にスペースを追加する
写真アプリの例は、ページング時に画像間に黒いスペーシングがあります。
UIScrollViewに追加される複数の画像の間にギャップ/スペースを追加するにはどうすればよいですか?UIScrollViewの画像間にスペースを追加する
写真アプリの例は、ページング時に画像間に黒いスペーシングがあります。
それはあなたがサブビューとしてUIImageViewを追加し、あなたのサブビューとscrollViewのcontentSizeの大きさを知って欲しいスペースを計算するだけで、基本的な数学..
です。
EDIT:
これは基本的に
-(void)photosGallery
{
UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:(CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = 320.0f, .size.height = 416.0f}];
scrollView.contentSize = (CGSize){.width = view.frame.size.width, .height = 372.0f};
scrollView.backgroundColor = [UIColor whiteColor];
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = NO;
/// Build gallery
CGSize thumbSize = (CGSize){.width = 75.0f, .height = 75.0f};
const CGFloat xSpace = (scrollView.frame.size.width - (thumbSize.width * kPictsPerRow))/(kPictsPerRow + 1); // kPictsPerRow = Number of pictures in a row
const CGFloat xInc = thumbSize.width + xSpace;
const CGFloat yInc = thumbSize.height + 15.0f;
CGFloat x = xSpace, y = 10.0f;
for (NSUInteger i = kMaxPictures; i--;)
{
UIImageView* pv = [[UIImageView alloc] initWithFrame:(CGRect){.origin.x = x, .origin.y = y, .size = thumbSize}];
[scrollView addSubview:pv];
[pv release];
x += xInc;
const NSUInteger eor = i % kPictsPerRow;
if (!eor)
y += yInc, x = xSpace;
}
[scrollView release];
}
ギャラリーを構築するには、ちょうどUIImageVIewのそれらの間にいくつかのスペースを持つためにフレームを設定する必要があります。例えばscroll_viewがUIScrollViewのある場合は、これは、粗例ですが、ポイントを示し
scroll_view.contentSize = CGSizeMake(1000,100);
for (int i=0;i<10;i++){
UIImageView *imv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"some_image.png"]];
CGRect frame = CGRectInset(CGRectMake(i * 100,0.0,100.0,100.0), 5.0, 4.0);
imv.frame = frame;
[scroll_view addSubview:imv];
}
行うことができます。 CGRect(CGRectInset)を挿入すると、スクロールビューで画像間にスペースができます。
私は同様のアプリでこれをしなければならなかった、と私の解決策は、(質問はビューをスクロールする関連していなかったことに注意してください、しかし関与概念は似ています)この回答に記載されて:PDF in UIWebView
私はあなたを想定しますページングを有効にしてUIScrollViewに画像を追加する方法を理解しています。また、フルスクリーンの写真を見たいと思っていますが、スクロールするときには、それらの間にギャップがあります。 yesの場合、ここで可能な解決策の一つ...
...これは、ズーミングを望んでいない場合は、フルスクリーン、ページング、ギャップをスクロールしたくない場合は非常に高速です。おそらく、このコードを探している
:
#define FRAME_WIDTH 330
- (void)viewDidLoad {
[super viewDidLoad];
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, FRAME_WIDTH, self.view.bounds.size.height)];
self.scrollView.bounces = YES;
self.scrollView.pagingEnabled = YES;
UIImageView *leftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2.png"]];
leftView.frame = CGRectMake(0, 0, 320, self.view.bounds.size.height);
UIImageView* centerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"9.png"]];
centerView.frame = CGRectMake(FRAME_WIDTH, 0, 320, self.view.bounds.size.height);
UIImageView *rightView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"10.png"]];
rightView.frame = CGRectMake(FRAME_WIDTH * 2, 0,320,self.view.bounds.size.height);
[self.scrollView addSubview:leftView];
[self.scrollView addSubview:centerView];
[self.scrollView addSubview:rightView];
[self.scrollView setContentSize:CGSizeMake(FRAME_WIDTH * 3, 0)];
[self.scrollView setContentOffset:CGPointMake(FRAME_WIDTH, 0)];
[self.view addSubview:self.scrollView];
}
は、iOSの写真アプリのように見えます。この例では、3つのImageViewを作成します。
テストプロジェクトを添付あなたはそれを自分で試すことができるように:Project
UIScrollViewののフレームをいじり避けるために、あなたはUIScrollViewのをサブクラス化し、各ページへのオフセットを適用するlayoutSubviewsをオーバーライドすることができます。
アイデアは以下の観察に基づいています!zoomScale == 1、オフセットがある場合には、それは右/左エッジ
とき:
- (void) layoutSubviews
{
[super layoutSubviews];
// Find a reference point to calculate the offset:
CGRect bounds = self.bounds;
CGFloat pageGap = 8.f;
CGSize pageSize = bounds.size;
CGFloat pageWidth = pageSize.width;
CGFloat halfPageWidth = pageWidth/2.f;
CGFloat scale = self.zoomScale;
CGRect visibleRect = CGRectMake(bounds.origin.x/scale, bounds.origin.y/scale, bounds.size.width/scale, bounds.size.height/scale);
CGFloat totalWidth = [self contentSize].width/scale;
CGFloat scrollWidth = totalWidth - visibleRect.size.width;
CGFloat scrollX = CGRectGetMidX(visibleRect) - visibleRect.size.width/2.f;
CGFloat scrollPercentage = scrollX/scrollWidth;
CGFloat referencePoint = (totalWidth - pageWidth) * scrollPercentage + halfPageWidth;
// (use your own way to get all visible pages, each page is assumed to be inside a common container)
NSArray * visiblePages = [self visiblePages];
// Layout each visible page:
for (UIView * view in visiblePages)
{
NSInteger pageIndex = [self pageIndexForView:view]; // (use your own way to get the page index)
// make a gap between pages
CGFloat actualPageCenter = pageWidth * pageIndex + halfPageWidth;
CGFloat distanceFromRefPoint = actualPageCenter - referencePoint;
CGFloat numOfPageFromRefPoint = distanceFromRefPoint/pageWidth;
CGFloat offset = numOfPageFromRefPoint * pageGap;
CGFloat pageLeft = actualPageCenter - halfPageWidth + offset;
view.frame = CGRectMake(pageLeft, 0.f, pageSize.width, pageSize.height);
}
}
Iは知っているが、ギャップはスクロールビューにどのように入力/追加されますか?各画像のサブビューがスクロールビューに追加されている場合、スクロールビューに適用されるこの計算はどこですか?どのように追加されますか? – jarryd
@Benj:私はすべての画像を追加するときに私が持っている1つの問題は効率です。すべての画像をビューにロードするにはしばらく時間がかかります。これを行う最適な方法はありますか? – jarryd
イメージの大きさはどれくらいですか?何人いるの? – Nyx0uf