UİScrollView zaman merkezi içerik daha küçük
Yakınlaştırma ve kaydırma için kullanılacak olan UIImageView
içinde UIScrollView
var. Eğer kaydırma resim/içerik kaydırma görünümü daha büyük görünüm eğer her şey düzgün çalışır. Görüntü kaydırma görünümünü daha küçük olduğunda ancak, kaydırma görünümü sol üst köşeye sıkışıyor. Fotoğraflar uygulaması gibi ortada tutmak istiyorum.
Herhangi bir fikir veya örnekler UIScrollView
küçük zaman merkezli içerik tutmak hakkında?
İPhone 3.0 ile çalışıyorum.
Aşağıdaki kodu hemen hemen çalışır. Görüntü minimum seviyede zoom ulaştıktan sonra sıkıştır eğer sol üst köşesine döner.
- (void)loadView {
[super loadView];
// set up main scroll view
imageScrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
[imageScrollView setBackgroundColor:[UIColor blackColor]];
[imageScrollView setDelegate:self];
[imageScrollView setBouncesZoom:YES];
[[self view] addSubview:imageScrollView];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WeCanDoIt.png"]];
[imageView setTag:ZOOM_VIEW_TAG];
[imageScrollView setContentSize:[imageView frame].size];
[imageScrollView addSubview:imageView];
CGSize imageSize = imageView.image.size;
[imageView release];
CGSize maxSize = imageScrollView.frame.size;
CGFloat widthRatio = maxSize.width / imageSize.width;
CGFloat heightRatio = maxSize.height / imageSize.height;
CGFloat initialZoom = (widthRatio > heightRatio) ? heightRatio : widthRatio;
[imageScrollView setMinimumZoomScale:initialZoom];
[imageScrollView setZoomScale:1];
float topInset = (maxSize.height - imageSize.height) / 2.0;
float sideInset = (maxSize.width - imageSize.width) / 2.0;
if (topInset < 0.0) topInset = 0.0;
if (sideInset < 0.0) sideInset = 0.0;
[imageScrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [imageScrollView viewWithTag:ZOOM_VIEW_TAG];
}
/************************************** NOTE **************************************/
/* The following delegate method works around a known bug in zoomToRect:animated: */
/* In the next release after 3.0 this workaround will no longer be necessary */
/**********************************************************************************/
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
[scrollView setZoomScale:scale 0.01 animated:NO];
[scrollView setZoomScale:scale animated:NO];
// END Bug workaround
CGSize maxSize = imageScrollView.frame.size;
CGSize viewSize = view.frame.size;
float topInset = (maxSize.height - viewSize.height) / 2.0;
float sideInset = (maxSize.width - viewSize.width) / 2.0;
if (topInset < 0.0) topInset = 0.0;
if (sideInset < 0.0) sideInset = 0.0;
[imageScrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
}
CEVAP
Çok basit bir çözümü var! İhtiyacınız olan tüm ScrollViewDelegate yakınlaştırma sırasında küme (imageview) merkezinde güncellemek için. Eğer Yakınlaştırılmış görüntü scrollview küçükse o zaman alt görünümünü ayarlayın.başka merkezi (0,0) merkezi.
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
UIView *subView = [scrollView.subviews objectAtIndex:0];
CGFloat offsetX = MAX((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5, 0.0);
CGFloat offsetY = MAX((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5, 0.0);
subView.center = CGPointMake(scrollView.contentSize.width * 0.5 offsetX,
scrollView.contentSize.height * 0.5 offsetY);
}
Disk belleği artırır çerçeve boyutunda...
Geçiş daha küçük, daha büyük bir monit...
Evvel zaman içinde, zaman > daha hı...
Tüm dosyaları " zaman 3 gün;bağıms...
Twitter bootstrap uzak kalıcı aynı içe...