如何使用UIScrollView以编程方式强制滚动?

sir*_*333 6 iphone uiscrollview uikit ios

我有一个水平的 UIScrollview设置(意思是它不是向上和向下滚动但只向左滚动的一个)并且在应用程序启动时,我希望这个滚动视图向左滚动,然后向右滚动 - 有点"展示"它滚动的能力 - 然后最后停止,然后让用户接管并用手指手动控制滚动.一切正常 - 除了这个有载的左右演示滚动.

我没有使用Interface Builder,我正在用代码做任何事情:

//(this is in viewDidLoad:)
// Create the scrollView:
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)];
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView
[mainView addSubview:photosScroll];


// Set the photoScroll's delegate: 
photosScroll.delegate = self;

// Create a frame to which to scroll:   
CGRect frame = CGRectMake(10, 10, 80, 150);
// Scroll to that frame:
[photosScroll scrollRectToVisible: frame animated:YES];
Run Code Online (Sandbox Code Playgroud)

所以scrollView加载成功,我可以用我的手指左右滚动它 - 但它不会像我希望的那样"自动滚动".

  • 我尝试在将scrollView添加为子视图之前和之后调用scrollRectToVisible - 不起作用.
  • 想想这可能发生在loadView而不是viewDidLoad中?但如果是这样,怎么样?

有任何想法吗?

dar*_*s0n 5

有两种方法可以做到这一点:

  1. 使用scrollRectToVisible:animated:零X值,然后使用大的正值,然后将其设置回中间点.滚动视图作为子视图添加后可以调用该方法(可能之前也是如此,但最好是安全的).你需要使用你的contentSize知识来计算左边屏幕的X值,并了解滚动视图中各种元素的宽度.
  2. 由于您只是在进行快速动画并且会给用户控制,因此这可能是一个快速而又脏的动画,因此您可以使用setContentOffset:animated:强制滚动视图的内容相对于当前视图位置移动.将元素向右移动以进行左滚动(正X值),然后向左移动两次以进行右滚动(负X值),然后将偏移设置回零.

你不应该把任一中viewDidLoadloadView; 把它们放进去viewDidAppear,这是在你的滚动视图实际绘制在屏幕上之后.您只关心用户可以看到的动画!