Mik*_*ike 7 iphone uiscrollview ios
我正在创建一个类似于照片应用的ImageViewer.我有一个PagingScrollView,它是视图控制器的视图(在loadView中创建).这些页面是带有UIImageView子视图的UIScrollViews.一切都工作hunky dory,直到我尝试'跳过'(设置内容偏移)到除第一个之外的索引.如果我跳过说图像'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;
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图设置内容偏移量的方法
#define myView (UIScrollView *)self.view
[myView setContentOffset:[self contentOffsetForIndex:index]];
[..]
- (CGPoint)contentOffsetForIndex:(NSUInteger)index
{
return CGPointMake((index * (self.view.frame.size.width)), 0);
}
Run Code Online (Sandbox Code Playgroud)
Tat*_*asi 12
你是水平还是垂直滚动?你的偏移逻辑
CGPointMake((index * (self.view.frame.size.width)), 0); 将移动到Y轴的0.
编辑
我是一个懒惰的写作方法.
以下是我采用的找出偏移相关问题的方法:
a)以编程方式偏移由setContentOffset:,scrollRectToVisible,setFrame(UIScrollView,内部调用SetContentOffset)设置.首先检查代码中的所有这些是否正确.
b)打印在scrollViewDidScroll:方法中设置的偏移的日志.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@" Offset = %@ ",NSStringFromCGPoint(scrollView.contentOffset));
}
Run Code Online (Sandbox Code Playgroud)
这将帮助您识别正在设置的偏移值(在大多数情况下,所需的偏移量被另一个对setContentOffset的调用覆盖:代码中的某些位置;假设当前偏移量为(130,0)并且您想要设置offset(300,0)它在步骤中发生(如果是动画的),你可能会得到像这样的日志
Offset = {130,0}
Offset = {190,0}
Offset = {220,0}
Offset = {270,0}
Offset = {300,0}
如果有一些其他调用setContentOffset(动画),让我们说它设置偏移到(0,0),你得到的日志看起来
如果你注意到日志中的第二个模式,你可以确定有一些非预期的调用setContentOffset.
3)一旦你识别出对setContentOffset的非预期调用的调用,尝试找到它的来源(将断点设置为setContentOffset可能有帮助),并且可以根据具体情况进行处理.例如,是为UIScrollView设置框架时调用的内部方法.这可能是原因(尝试在设置帧后应用先前的偏移).
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}
_adjustContentOffsetIfNecessary
希望这有帮助(也可以,在删除投票时:))
| 归档时间: |
|
| 查看次数: |
23979 次 |
| 最近记录: |