在符合UIApplicationDelegate和UIScrollViewDelegate的类中,我执行了以下操作:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Created an instance of UIScrollView to house a horizontal strip - along the x-axis - of kNumberOfPages UIViews:
scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
// Make self the delegate
scrollView.delegate = self;
// Set content size to the cumulative width of all UIViews contained
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * kNumberOfPages, scrollView.frame.size.height);
// Zoom range is from a min of the width of the scrollView to a max of 2 * scrollView.contentSize
scrollView.minimumZoomScale = scrollView.frame.size.width / scrollView.contentSize.width;
scrollView.maximumZoomScale = 2 * scrollView.contentSize;
// A subclass of UIView will be the container for the horizontal strip of UIViews
containerView = [[ConstrainedView alloc] initWithFrame:CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)];
// The only difference betrween ConstrainedView and UIView is this overloaded method that constrains zooming to only the x-axis
- (void)setTransform:(CGAffineTransform)newValue {
// Scale along the y-axis only
CGAffineTransform constrainedTransform = CGAffineTransformScale(CGAffineTransformIdentity, newValue.a, 1.0);
[super setTransform:constrainedTransform];
}
// Fill the container view with UIViews as subviews
CGFloat horizontalOffsetX = 0.0;
for (int i = 1; i <= kNumberOfPages; i++) {
CGRect frame = CGRectMake(horizontalOffsetX, 0.0, scrollView.frame.size.width, scrollView.frame.size.height);
UIView *v = [[[UIView alloc] initWithFrame:frame] autorelease];
// paint the background of each UIView a random color.
v.backgroundColor = [UIColor colorWithRed:randomRed green:randomGreen blue:randomBlue alpha:1.0];
[containerView addSubview:v];
horizontalOffsetX += v.bounds.size.width;
} // for (kNumberOfPages)
// insert the container view as a subview of scrollView
[scrollView addSubview:containerView];
[window addSubview:scrollView];
[window makeKeyAndVisible];
}
看起来很温顺,对吗?这是奇怪的。放大 - 放大 - 工作正常。然而,当我放大时,会出现阻力增加,抖动和慢度增加的情况,就像我试图接近完全缩小时拖动硬化糖蜜一样。压缩N UIViews几乎是不可能的,因此它们都出现在UIScrollView框架的边界内。非常奇怪。
有人可以解释一下发生了什么,以及这实际上是不是一个错误?
干杯,
道格
答案 0 :(得分:1)
更新
我的方法似乎与以下警告有关。这里似乎存在边界条件问题。
这有效:
scrollView.minimumZoomScale =(scrollView.frame.size.width / scrollView.contentSize.width)/ 0.99;
这会挂起 - 崩溃 - 应用:
scrollView.minimumZoomScale = scrollView.frame.size.width / scrollView.contentSize.width;
只要scrollView的宽度超出了内容的宽度 - 无论差异缩放 - 应用程序似乎都能正常工作。
我可以轻松解决这个小限制。凉。
干杯,
道格