ios - 如何使用 NSTimer 更改滚动视图内图像幻灯片上的页面控制指示器
问题描述
这是工作正常的图像滑块。手动拖动时,图像会发生变化,指示器也会发生变化,但是当我添加动画时,只有图像会自动变化而不是指示器。
而不是动画图像,我想滚动图像,以便指示器改变,就像它在拖动时改变一样。我也想为它添加计时器。
@implementation DashboardViewController {
NSArray * animationArray;
}
@synthesize scroller = scroller;
@synthesize pageControl = pageControl;
-
(void) viewDidLoad {
[super viewDidLoad];
scroller.pagingEnabled = YES;
scroller.showsHorizontalScrollIndicator = NO;
scroller.delegate = self;
animationArray = [NSArray arrayWithObjects: [UIImage imageNamed: @ "image1.jpg"],
[UIImage imageNamed: @ "image2.jpg"],
[UIImage imageNamed: @ "image3.jpg"],
[UIImage imageNamed: @ "image4.png"],
[UIImage imageNamed: @ "image5.jpg"],
nil
];
CGRect scrollFrame = CGRectMake(0, 0, self.view.frame.size.width, self.scroller.frame.size.height);
scroller.frame = scrollFrame;
self.scroller.contentSize = CGSizeMake(self.scroller.frame.size.width * animationArray.count, self.scroller.frame.size.height);
for (int i = 0; i < animationArray.count; i++) {
CGRect frame;
frame.origin.x = self.scroller.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scroller.frame.size;
UIImageView * imgView = [
[UIImageView alloc] initWithFrame: CGRectMake(self.scroller.frame.size.width * i, 0, self.scroller.frame.size.width, self.scroller.frame.size.height)
];
imgView.image = [animationArray objectAtIndex: i];
imgView.frame = frame;
imgView.animationImages = animationArray;
imgView.animationDuration = 8;
imgView.animationRepeatCount = 0;
[imgView startAnimating];
[self.scroller addSubview:imgView];
}
self.pageControl.currentPage = 0;
}
-
(void) scrollViewDidScroll: (UIScrollView * ) sender {
if (!pageControlBeingUsed) {
// Switch the indicator when more than 50% of the previous/next page is visible
CGFloat pageWidth = self.scroller.frame.size.width;
int page = floor((self.scroller.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
self.pageControl.currentPage = page;
}
} -
(void) scrollViewWillBeginDragging: (UIScrollView * ) scrollView {
pageControlBeingUsed = NO;
}
-
(void) scrollViewDidEndDecelerating: (UIScrollView * ) scrollView {
[self setIndiactorForCurrentPage];
} -
(void) setIndiactorForCurrentPage {
uint page = scroller.contentOffset.x / scroller.frame.size.width;
[pageControl setCurrentPage: page];
}
-
(IBAction) changePage {
// Update the scroll view to the appropriate page
CGRect frame;
pageControl.currentPage = animationArray.count;
frame.origin.x = self.scroller.frame.size.width * self.pageControl.currentPage;
frame.origin.y = 0;
frame.size = self.scroller.frame.size;
[self.scroller scrollRectToVisible: frame animated: YES];
pageControlBeingUsed = YES;
}
-
(void) didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
self.scroller = nil;
self.pageControl = nil;
}
而不是动画图像,我想滚动图像,以便指示器改变,就像它在拖动时改变一样。我也想为它添加计时器。
解决方案
我认为您必须在 for 循环中设置当前页面,以便使用图像自动更改页面控件。
//move this up
self.pageControl.currentPage = 0;
for (int i = 0; i < animationArray.count; i++) {
CGRect frame;
frame.origin.x = self.scroller.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scroller.frame.size;
UIImageView * imgView = [
[UIImageView alloc] initWithFrame: CGRectMake(self.scroller.frame.size.width * i, 0, self.scroller.frame.size.width, self.scroller.frame.size.height)
];
imgView.image = [animationArray objectAtIndex: i];
imgView.frame = frame;
imgView.animationImages = animationArray;
imgView.animationDuration = 8;
imgView.animationRepeatCount = 0;
[imgView startAnimating];
self.pageControl.currentPage = i; //set i to current page
[self.scroller addSubview:imgView];
}
推荐阅读
- cdi - javax.faces.component.UpdateModelException:javax.el.PropertyNotFoundException。目标不可达,标识符解析为空
- php - 根据语言更改 WooCommerce 货币
- ruby-on-rails - 安装 RVM 时,它返回一个警告:上述文件包含 PATH= 内部没有 $PATH,这可能会破坏 RVM
- python - Pygame 垂直碰撞
- python - 试图让几个覆盆子交流
- c++ - 如何在 C++ 中正确添加库?
- android - 具有自定义字体/样式的 Android Firebase InAppMessaging
- python - Python3 流式字符串替换
- node.js - AWS API Gateway 未被添加为 AWS Lambda 的触发器
- php - PHP - 提取两个单词之间的字符串作为数组的一部分