在将我的问题描述为一个非常基本的问题之前,我们是否可以通过此方法返回UIScrollView
个对象
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
现在我的问题是,我有一个父scrollview
,里面有多个子scrollview
(所有水平和分页启用)。
每个孩子scrollview
都有一个ImageView
。我从服务器获得了zoomScale
因素并且基于image
,我必须对其进行缩放,问题是当我尝试缩放内部有scrollView
的孩子image
时它,它只缩放最后一个孩子scrollview
。
所以我想,我需要找到一种方法,我们可以返回上述书面代表的scrollview
形式。
任何人都知道如何解决这个问题?
这是UIView类,我在这上面添加了scrollView和图像,并返回了imageView for scrollView Delegate
示例代码:
- (id)initWithFrame:(CGRect)frame image:(UIImage *)image
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor=[UIColor yellowColor];
self.imageView = [[UIImageView alloc] initWithImage:image];
self.imageView.tag = VIEW_FOR_ZOOM_TAG;
self.imageView.frame=frame;//CGRectMake(8,8 ,305, 400);
[self.imageView setContentMode:UIViewContentModeScaleAspectFit];
self.scrollView = [[UIScrollView alloc] initWithFrame:frame];
self.scrollView.minimumZoomScale = 0.4f;
self.scrollView.maximumZoomScale = 2.0f;
self.scrollView.backgroundColor=[UIColor redColor];
self.scrollView.zoomScale = 1.0f;
self.scrollView.contentSize = self.imageView.bounds.size;
self.scrollView.delegate = self;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
[self.scrollView setCanCancelContentTouches:NO];
[self.scrollView addSubview:self.imageView];
[self addSubview:self.scrollView];
NSLog(@"ScrollViewPostion %f",self.scrollView.frame.origin.x);
}
return self;
}
#pragma -mark
#pragma -mark ScrollViewDelegates
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [scrollView viewWithTag:VIEW_FOR_ZOOM_TAG];
}
在我的主viewController类中,我这样做但是它没有在scrollview中正确添加所有图像
NSLog(@"Inner scrollFrame and content size %f %f",innerScrollFrame.origin.x,mainScrollView.contentSize.width);
JoinSeeSubView *subView=[[JoinSeeSubView alloc] initWithFrame:innerScrollFrame image:img];
[self.mainScrollView addSubview:subView];
if (i < [self.allUrlArray count]-1) {
innerScrollFrame.origin.x += innerScrollFrame.size.width;
}
i++;
mainScrollView.contentSize = CGSizeMake(innerScrollFrame.origin.x + innerScrollFrame.size.width, mainScrollView.bounds.size.height);
答案 0 :(得分:1)
我不完全确定问题是什么,但是您正在循环浏览多个图像并重新编写imageView
和pageScrollView
属性,因此在添加最后一个后,这就是您的位置指针将指向,这就是为什么它只缩放你的最后一张图像。
最好的方法是创建一个UIView
子类来处理每个图像及其父卷轴视图,只需将该类添加到主UIScrollView
如果您不想这样做,则必须找到另一种方法来访问每个单独的UIScrollView
,可能使用标签,但不建议这样做
编辑 - 某些基本代码:
@interface A : UIView {
UIScrollView *scrollView
UIImage View *imageView;
}
// initialization method that gets the image and the CGRect
@end
@implementation A
// implement initialization that loads the UIImage into the imageView, and set scrollView.delegate = self
// implement scroll view delegate method viewForZooming and return the imageView
@end
然后,在你正在使用的任何课程上:
for (int i = 0; i < imagesCount; i++) {
UIImage *image = ...; // image i
CGRect rect = ...; // find rect
A *subview = [[A alloc] initWithFrame:rect image:image]
[self.mainScroll addSubview:subview];
}
答案 1 :(得分:0)
如果上述方法无法帮助真正有需要的人,我以不同的方式解决了这个问题,但不确定这是否是正确的方法。
因此,我没有创建一个扩展UIView的新类,而是在该数组中创建并数组并存储内部scrollview的所有对象。所以我的代码看起来像
UIScrollView *pageScrollView = [[UIScrollView alloc] initWithFrame:innerScrollFrame];
pageScrollView.minimumZoomScale = 0.4f;
pageScrollView.maximumZoomScale = 2.0f;
pageScrollView.zoomScale = 1.0f;
pageScrollView.backgroundColor=[UIColor clearColor];
pageScrollView.delegate = self;
[pageScrollView addSubview:self.imageview];
[mainScrollView addSubview:pageScrollView];
[self.pageScrollViewObjArray addObject:pageScrollView];
每当我需要访问scrollview中包含的特定imageview时,我会这样做: -
UIScrollView *sv=(UIScrollView*)[self.pageScrollViewObjArray objectAtIndex:swipeCounter];
sv.zoomScale=1.0f;
但正如我之前所说,我不知道这段代码的效率如何,但已经超过一个月的时间,应用程序已经存储并正在进行测试,但由于这一点没有问题。