我想要在页面上停留5秒钟的图像,但每次我的滚动视图滚动时都会显示。显然我需要为UILabel
和UIScrollView
的某种方法结合动画。我不确定使用哪一个是诚实的。另外我在一个UIScrollView
上有两个UIViewController
,所以我不知道我应该设置为委托。
以下是我目前的动画
[UIView animateWithDuration:0.3 animations:^{ // animate the following:
pageCountImage.frame = CGRectMake(0, 0, 100, 50); // move to new location
}];
答案 0 :(得分:4)
您的视图控制器可以是两个滚动视图的委托。同意@Ravi您可以使用委托参数来确定滚动的滚动视图。
听起来你需要打包一些动画才能对UI有意义:
// hide or show the page count image after a given delay, invoke completion when done
- (void)setPageCountImageHidden:(BOOL)hidden delay:(NSTimeInterval)delay completion:(void (^)(BOOL))completion {
BOOL currentlyHidden = self.pageCountImage.alpha == 0.0;
if (hidden == currentlyHidden) return;
[UIView animateWithDuration:0.3 delay:delay options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.pageCountImage.alpha = (hidden)? 0.0 : 1.0;
} completion:completion];
}
// move the page count image to the correct position given a scroll view content offset
- (void)positionPageControlForContentOffset:(CGFloat)xOffset {
// assume page width is a constant (the width of a page in the scroll view)
NSInteger page = xOffset / kPAGEWIDTH;
// assume max page is a constant (the max number of pages in scroll view)
// scroll positions in the "bounce" will generate page numbers out of bounds, fix that here...
page = MAX(MIN(page, kMAXPAGE), 0);
// kPAGE_INDICATOR_WIDTH the distance the page image moves between pages
// kPAGE_INDICATOR_ORIGIN the page image x position at page zero
CGFloat xPosition = kPAGE_INDICATOR_ORIGIN + page * kPAGE_INDICATOR_WIDTH;
// assume y position and size are constants
CGRect pageIndicatorFrame = CGRectMake(xPosition, kYPOS, kWIDTH, kHEIGHT);
// finally, do the animation
[UIView animateWithDuration:0.3 animations:^{
self.pageCountImage.frame = pageIndicatorFrame;
}];
}
然后在视图中滚动:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == /* the scroller with the page control */) {
[self setPageCountImageHidden:NO delay:0.0 completion:^(BOOL finished) {
[self positionPageControlForContentOffset:scrollView.contentOffset.x];
[self setPageCountImageHidden:YES delay:5.0 completion:^(BOOL finished){}];
}];
}
// and so on...
答案 1 :(得分:3)
您应该实施<UIScrollViewDelegate>
。使用方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView
并在那里编写动画代码。如果您有多个滚动视图,则可以执行以下操作:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if(scrollView == myScrollView1)
// do something
else if (scrollView == myScrollView2)
// do something else
else
// do something else
}
答案 2 :(得分:0)
就像tableview一样,您应该配置和控制滚动操作。您可以编写控制器的扩展并控制所有滚动操作。例如,您可以查看:
extension ExampleViewController: UIScrollViewDelegate {
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
// your actions here
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
// your actions here
}
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
// your actions here
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// your actions here
}
}