gpt4 book ai didi

iphone - UIScrollView编程设置contentOffset问题

转载 作者:可可西里 更新时间:2023-11-01 03:28:15 25 4
gpt4 key购买 nike

我正在创建一个类似于照片应用程序的 ImageViewer。我有一个 PagingScrollView,它是 View Controller 的 View (在 loadView 中创建)。这些页面是带有 UIImageView subview 的 UIScrollView。一切正常,直到我尝试“跳过”(设置内容偏移量)到第一个索引以外的索引。如果我跳到说图像“i”,则图像会正确显示,但如果用户执行单击手势,contentOffset 会自行重置以显示图像“0”。其他手势(例如拖动)不会发生此错误,如果您先执行其他手势(例如拖动),触摸也不会发生此错误。

这是我的 ImageViewerController 的 loadView

- (void)loadView
{
//Make the outer spaging scroll view
CGRect pagingScrollViewFrame = [self frameForPagingScrollView];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
scrollView.pagingEnabled = YES;
scrollView.backgroundColor = [UIColor blackColor];
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.contentSize = [self contentSizeForPagingScrollView];
scrollView.delegate = self;
self.view = scrollView;
}

这就是我尝试设置内容偏移量的方式

#define myView (UIScrollView *)self.view

[myView setContentOffset:[self contentOffsetForIndex:index]];

[..]

- (CGPoint)contentOffsetForIndex:(NSUInteger)index
{
return CGPointMake((index * (self.view.frame.size.width)), 0);
}

最佳答案

你是水平滚动还是垂直滚动?你的偏移逻辑
CGPointMake((index * (self.view.frame.size.width)), 0); 将移动到 Y 轴的 0。

以下是我用来查找偏移量相关问题的方法:

a) 通过 setContentOffset:, scrollRectToVisible, setFrame(of UIScrollView, 内部调用 SetContentOffset) 以编程方式设置偏移量。首先检查您的代码中的所有这些,如果它们是正确的。

b) 打印在 scrollViewDidScroll: 方法中设置的偏移量的日志。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@" Offset = %@ ",NSStringFromCGPoint(scrollView.contentOffset));
}

这将帮助您识别正在设置的偏移值(在大多数情况下,所需的偏移量会被另一个对 setContentOffset: 的调用覆盖,在代码中的某些位置;假设当前偏移量是 (130,0) 并且您想要设置偏移量 (300,0) 它发生在步骤中(如果动画),你可能会得到类似的日志

Offset = {130,0}  
Offset = {190,0}
Offset = {220,0}
Offset = {270,0}
Offset = {300,0}

如果有一些其他调用 setContentOffset(animated),假设它将偏移量设置为 (0,0),您获得的日志将如下所示

Offset = {130,0}    
Offset = {190,0}
Offset = {90, 0}
Offset = {220,0}
Offset = {60,0}
Offset = {270,0}
Offset = {30,0}
Offset = {300,0}
Offset = {0,0}

如果您注意到日志中的第二个模式,您可以确定对 setContentOffset 进行了一些意外调用。
3) 一旦确定存在对 setContentOffset 的意外调用,请尝试找到它的来源(将断点设置为 setContentOffset 可能会有所帮助),并且可以根据具体情况解决。例如:
_adjustContentOffsetIfNecessary,是UIScrollView设置frame时调用的内部方法。这可能是原因(尝试在设置框架后应用先前的偏移量)。

关于iphone - UIScrollView编程设置contentOffset问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com