所以,我有这个UIScrollView
,刚开始时缩放就很好。我设置了最小和最大缩放比例,并设置了必要的委托方法-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView;
。最初,我在其上设置了两个子视图(一个小球),很明显,一个子视图会缩小,而另一个子视图则不会(球视图)。我想对此进行更改,以便它们都能正确缩放,因此我将较小的视图(球)添加到另一个的子视图列表中。但是,现在没有缩放。我可以在必要时发布代码,但是我想知道这个问题是否对任何人都熟悉,他们是否可以提供答案。
编辑:这是代码
头文件
@interface NumberLineScroll : UIScrollView {
NumberLine* nline;
id <UIScrollViewDelegate> delegate;
}
@property(nonatomic, retain)id <UIScrollViewDelegate> delegate;
- (NumberLine*)getLine;
@end
主文件
#import "NumberLineScroll.h"
@implementation NumberLineScroll
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setUserInteractionEnabled:YES];
nline = [[NumberLine alloc] initWithFrame:CGRectMake(0, 0, 2100, 400)];
[self addSubview:nline];
self.minimumZoomScale = 0.5;
self.maximumZoomScale = 3.0;
}
return self;
}
- (NumberLine*)getLine {return nline;}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}
- (void)dealloc {
[nline release];
[super dealloc];
}
@end
这是滚动视图。 nline只是具有球视图的视图,以及在
drawRect
期间绘制的线。这是委托类中的方法实现:- (void)scrollViewDidScroll:(UIScrollView *)scrollView {}
- (void)doTest {NSLog(@"test");}
-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView {return [nline getLine];}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
NSLog(@"Zoom ended");
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
Ball* ball = [[nline getLine] getBall];
CGPoint newCenter = ball.center;
newCenter.y = ball.center.y * scrollView.zoomScale;
newCenter.x = ball.center.x * scrollView.zoomScale;
[[nline getLine] changeBalLoc:newCenter];
}
最佳答案
我认为当在UIScrollView上进行zoomIn / Out时,您需要一些有关管理子视图的信息
请注意两件事,首先从下面的委托方法返回在缩放时间上的largeSubview(包含球视图作为子视图)。
-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return largeSubvew
//here that view contains smallView(ball) too as mentioned you changed
}
在放大/缩小滚动视图时管理小视图的位置。
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGPoint newCenter = smallerViewCenter;
//smallerViewCenter contains the center point of smallerView(say ball),has set at load time, and only once
newCenter.y = smallerView.y * scrollView.zoomScale;
//new center is calculated on original position
newCenter.x = smallerView.x * scrollView.zoomScale;
smallerView.center = newCenter;
}
关于ios - UIScrollView无法缩放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16682274/