繁体   English   中英

放大和平移时看到大面积的UIScrollView背景

[英]Seeing large area of UIScrollView background when zoomed-in & pan down

问题

我遇到的问题是,当我放大UIScrollView(启用分页),然后向下平移(滚动吗?)–我可以将鼠标拖动到视图之外,并看到很大的滚动视图背景区域。 我放大得越远,UIScrollView的背景就会越多。 (我将scrollview的背景设置为绿色,这样我就能知道我在看什么)。

不知道为什么背景区域会这样暴露?

我一直在设置滚动视图的框架大小,边界大小,内容大小等,在各个位置都无济于事。

不幸的是,由于是新用户,我无法发布正在发生的事情的屏幕截图:(

更多详情:

我的应用程序的主视图包含一个全屏大小的UIScrollView,其中填充了许多UIView子视图。 通过在for循环中创建笔尖名称,然后使用loadNibNamed方法创建和添加UIView检索它们,将这些子视图添加到滚动视图中。

每个UIView都是在IB中设计的,并包含以下内容:一个UIImageView,其图像属性设置为.jpg图像,其下另一个较小的UIScrollView,以及位于我的imageview顶部的透明UIView,其中包含一堆自定义UIButton。

填充scrollView之后,我设置了其中的一些属性,例如contentSize,pageingEnabled,min和maxZoomScale等。然后将其委托设置为self(MainViewController)。

MainViewController的相关方法:

@implementation MainViewController_iPhone

@synthesize scrollView, loadedNibView;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {   
    [super viewDidLoad];
    [self loadNibs];
    [self initializeOrientation];
}

-(void) loadNibs {
    currentPage = 0;

    for (int i = 0; i < NUM_VIEWS; i++) {
        loadedNibView = [self getNibView:i];        //load the UIView from the associated nib file
        loadedNibView.tag = i;                      //used later to retrieve view for current page
        [scrollView addSubview:loadedNibView];
    }

    //Set the content size to sum of the widths of the all UIViews
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * NUM_VIEWS, self.view.frame.size.height);
    scrollView.pagingEnabled = YES;
    scrollView.bounces = YES;
    scrollView.clipsToBounds = YES;                 
    //scrollView.alwaysBounceVertical = YES;

    //zoom features
    scrollView.maximumZoomScale = 5.0;
    scrollView.minimumZoomScale = 1;                

    scrollView.delegate = self;                     
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView {   
    return [myScrollView viewWithTag:(currentPage)];
}

- (void)scrollViewDidScroll:(UIScrollView *)myScrollView {
    CGFloat pageWidth = myScrollView.frame.size.width;
    currentPage = floor((myScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
}

- (void)scrollViewDidZoom:(UIScrollView *)myScrollView {
}

- (void)scrollViewWillBeginZooming:(UIScrollView *)myScrollView withView:(UIView *)view
{   
    //zooming & paging do not work well together; disable paging while we're zooming
    myScrollView.pagingEnabled = NO;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)myScrollView withView:(UIView *)view atScale:(float)scale  
{   
    if(scale == 1)  //if we're zoomed entirely back out
    {
    //re-enable paging & reset the content size
    myScrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * NUM_VIEWS, self.view.frame.size.height);  //without this line, can no longer page through scrollview after zooming
    }
} 


@end

它是.h:

@interface MainViewController_iPhone : MainViewController <UIScrollViewDelegate> {  
    IBOutlet UIScrollView *scrollView;          //The main ScrollView that scrolls between pages of different images to search
    UIView *loadedNibView;                      //The UIView that we load from it's corresponding nib (i.e. IMG1_iPhone.xib)
    int currentPage;
}

//methods
-(void) loadNibs;
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView;
- (void)scrollViewWillBeginZooming:(UIScrollView *)myScrollView withView:(UIView *)view;
- (void)scrollViewDidEndZooming:(UIScrollView *)myScrollView withView:(UIView *)view atScale:(float)scale;
- (void)scrollViewDidZoom:(UIScrollView *)myScrollView;
- (void)scrollViewDidScroll:(UIScrollView *)myScrollView;

//properties
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIView *loadedNibView;

@end

任何想法/建议将不胜感激...谢谢!

好的,我知道了我的问题所在。

我意识到,当我放大第一张图像时,这使我产生了怪异的行为,滚动视图背景随着我的缩放而增大,但是如果我放大第二张图像,则没有怪异的行为。 因此,我开始怀疑这两个图像之间的区别是什么...并且开始意识到它一定是标签。 在我加载视图并设置其标签的for循环中,我将第一个设置为零,并从那里递增。 糟糕-有点忘了还有很多其他视图和对象的默认标记为零! 所以后来,当它要求标签为0的视图时,它返回了其他视图,并且该视图的大小被调整了,而不是我的图像。

固定:

#define ZOOM_TAG 1000

...


for (int i = 0; i < NUM_VIEWS; i++) {
    loadedNibView = [self getNibView:i];
    //loadedNibView.tag = i
    loadedNibView.tag = i + ZOOM_TAG;  //used later to retrieve view for current page
    [scrollView addSubview:loadedNibView];
}

...

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView {

    //return [myScrollView viewWithTag:(currentPage)];
    return [myScrollView viewWithTag:(currentPage + ZOOM_TAG)];

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM