// ads
_adsScrollView = [[UIScrollViewalloc] initWithFrame:CGRectMake(0.0f, 0.0f, kMainAdWidth, kMainAdHeight)];
_adsScrollView.pagingEnabled = YES;
_adsScrollView.bounces = NO;
_adsScrollView.showsHorizontalScrollIndicator = NO;
_adsScrollView.delegate = self;
UITapGestureRecognizer *tapAds = [[UITapGestureRecognizeralloc] initWithTarget:self
action:@selector(clickedAds)];
[_adsScrollViewaddGestureRecognizer:tapAds];
[self.viewaddSubview:_adsScrollView];
_adsPageControl = [[UIPageControlalloc] initWithFrame:CGRectMake(0.0f, 134.0f, APPBOUND.size.width, 8.0f)];
_adsPageControl.hidesForSinglePage = NO;
_adsPageControl.pageIndicatorTintColor = [UIColorcolorWithHexString:@"#bcddf0"alpha:1.0f];
_adsPageControl.currentPageIndicatorTintColor = [UIColorwhiteColor];
[self.viewaddSubview:_adsPageControl];
[SJBAdModelrequestAdListOnSucceed:^(id data) {
kNSLog(@"data === %@",data);
self.adsData = data;
[self loadAds];
} onFailure:^{
kNSLog(@"data ===");
self.adsData = [SJBAdModeladList];
[self loadAds];
}];
#pragma mark ==================添加轮播广告图======================
#pragma mark - UIScrollViewDelegate
//- (void)scrollViewDidScroll:(UIScrollView *)scrollView
//{
// if ( scrollView == _adsScrollView ){
// self.adsPageControl.currentPage = (int)(scrollView.contentOffset.x / kMainAdWidth) - 1;
// }
//}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if ( scrollView == _adsScrollView ){
NSInteger adsCount = [self.adsData count];
int currentPage = (int)floor(scrollView.contentOffset.x / scrollView.frame.size.width);
if (currentPage == 0) {
[scrollView scrollRectToVisible:CGRectMake(kMainAdWidth * (adsCount),0,kMainAdWidth,kMainAdHeight) animated:NO];
} else if ( currentPage == adsCount+1 ) {
[scrollView scrollRectToVisible:CGRectMake(kMainAdWidth, 0.0f, kMainAdWidth,kMainAdHeight) animated:NO];
}
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if ( scrollView == _adsScrollView ){
if ([_adsAutoScrollTimerisValid]) {
[_adsAutoScrollTimerinvalidate];
}
}
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if ( scrollView == _adsScrollView ){
if (![_adsAutoScrollTimerisValid]) {
_adsAutoScrollTimer = [NSTimerscheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(autoScrollAds)
userInfo:nil
repeats:YES];
}
}
}
#pragma mark - Private Methods
- (void)loadAds
{
NSInteger adsCount = [self.adsData count];
self.adsScrollView.contentSize = CGSizeMake( (adsCount+2) * kMainAdWidth, kMainAdHeight);
self.adsPageControl.numberOfPages = adsCount;
if (adsCount == 0 ){
return;
}
NSString *adImageUrl;
for (int i=0; i<adsCount+2;i++){
UIImageView *adImageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * APPBOUND.size.width, 0.0f, kMainAdWidth, kMainAdHeight)];
[adImageView setContentMode:UIViewContentModeScaleAspectFill];
if ( i==0 ){
adImageUrl = [self.adsData[adsCount-1] objectForKey:@"img"];
}else if ( i==(adsCount+1) ){
adImageUrl = [self.adsData[0] objectForKey:@"img"];
}else{
adImageUrl = [self.adsData[i-1] objectForKey:@"img"];
}
[adImageView setImageWithURL:[NSURL URLWithString:adImageUrl]];
[self.adsScrollView addSubview:adImageView];
}
self.adsScrollView.contentOffset = CGPointMake(kMainAdWidth, 0.0f);
if (adsCount > 1){
[_adsAutoScrollTimerinvalidate];
_adsAutoScrollTimer = [NSTimerscheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(autoScrollAds)
userInfo:nil
repeats:YES];
}
}
- (void)autoScrollAds
{
NSInteger adsCount = [self.adsData count];
int currentPage = (int)floor(self.adsScrollView.contentOffset.x / self.adsScrollView.frame.size.width);
if (currentPage == 0) {
[self.adsScrollViewscrollRectToVisible:CGRectMake(kMainAdWidth * (adsCount),0,kMainAdWidth,kMainAdHeight) animated:NO];
} else if ( currentPage == adsCount ) {
[self.adsScrollViewscrollRectToVisible:CGRectMake(kMainAdWidth, 0.0f, kMainAdWidth,kMainAdHeight) animated:NO];
}else{
[UIViewanimateWithDuration:0.5fanimations:^{
self.adsScrollView.contentOffset = CGPointMake(kMainAdWidth * (currentPage + 1), 0.0f);
}];
}
}
- (void)clickedAds
{
int currentPage = (int)floor(self.adsScrollView.contentOffset.x / self.adsScrollView.frame.size.width);
NSDictionary *adData = [self.adsData objectAtIndex:(currentPage-1)];
// SJBHelperViewController *webVC = [SJBHelperViewController SJBHelperVConURL:[adData objectForKey:@"downUrl"]];
// [self.navigationController pushViewController:webVC animated:YES];
TKQWebViewController *webVC = [TKQWebViewControllerwebVCWithURL:[adData objectForKey:@"downUrl"]];
// [self.navigationController pushViewController:webVC animated:YES];
[selfpresentViewController:webVC animated:YEScompletion:nil];
}
相关推荐
SuperScrollView 无限循环列表插件 有十几个例子的实现 SuperScrollView 无限循环列表插件 有十几个例子的实现 SuperScrollView 无限循环列表插件 有十几个例子的实现
ScrollView比官方例子优化更好!!!ScrollView是比较常用的UI组件之一,游戏中的任务榜、排行榜都少不了它,实际使用中存在一个问题,例如:在排行榜中要显示前100名玩家,如果真的把这100名玩家的信息全部创建,并...
基于SuperScrollView做的背包、成就、等级限制循环列表。SuperScrollView/Z_MyDemo文件夹是例子
一个利用UIScrollView结合UIPageControl的小例子,可以实现以下功能: 1、滑动翻页效果,并对应下面UIPageConrol的点的状态; 2、滑动到两端时,可以继续循环滑动; 3、可以设置自动翻页时间; 4、每个page页都可...
一个利用UIScrollView结合UIPageControl的小例子,可以实现以下功能: 1、滑动翻页效果,并对应下面UIPageConrol的点的状态; 2、滑动到两端时,可以继续循环滑动; 3、每个page页都可获取点击事件,以实现与主页面...
1.项目中应用组件,分享出来 2.支持横向和竖向无限滑动,基于ScrollView扩展 3.滑动时,自动计算分页,通过回调自动获取调用获取分页数据 4.使用简单,组件代码注释详细 5.例子简单明了
参考NGUI ScrollView的例子写的一个UGUI下的循环利用滚动框。 好几年前的了,因为Unity版本可能有些报错 稍作修改就行。
最后,为了实现自动滑动,我们可以使用`NSTimer`定时改变`scrollView.contentOffset`,或者利用`CADisplayLink`更精确地控制动画帧率。记得在用户交互时暂停定时器,避免与手动滑动冲突。 总结一下,实现不间断滑动...
在这个例子中,可能有一个代理方法用于提供图片数组,另一个方法用于确定当前显示的图片索引。 3. **定时器(NSTimer)实现自动滚动**: 利用NSTimer,可以定期触发一个回调函数,从而实现视图的自动滚动。定时器...
在这个例子中,开发者可能使用了UIImageView作为每个图片的视图,并将它们添加到UIScrollView或UICollectionView中,通过设置contentSize和contentOffset来实现无限滚动的效果。 接着,"Touch"标签提示我们这个应用...
UIScrollView 创建对象池循环利用实现无限滚动 Demo还有具体实现例子Package里都有。根据自己需求也可自行扩展。
实现无限循环滚动的ScrollView,即ScrollView滚动到最后一页,继续滚动的时候将滚动到第一页。 小编注:感谢开发者@车鹏 推荐此代码,并且为代码加上demo例子。 Code4App编译测试,适用环境:Xcode 4.3, iOS 5.0...
在这个例子中,我们创建了一个自定义的`ScrollView`子类,通过`Scroller`实现了平滑滚动。`smoothScrollTo()`方法用于启动平滑滚动到指定位置。 在实际应用中,你可能还需要根据需求调整滚动速度、方向以及是否循环...
"自定义datepicker"是一个这样的例子,它通过无限循环的ScrollView来实现,为用户提供了选择日期和时间的一种新颖方式。这个控件的设计和实现考虑了iOS 6.0及更高版本的兼容性,并且已经在Xcode 5.0和Xcode 5.1环境...
`initWithNibName:bundle:`方法是初始化控制器的地方,这里主要进行自定义初始化,但在这个例子中并未有特别的定制。 `scrollToNextPage:`方法是用于定时滚动的核心,它根据当前页码和`UIScrollView`的大小计算出...
- 可以通过循环创建UIImageView对象,并将每一张图片设置为UIImageView的`image`属性,然后添加为ScrollView的子视图。每个UIImageView的frame应根据图片大小和ScrollView的contentSize来设定。 - 为了实现平滑的...
源码实现怎样制作无限滚动以及循环滚动的滚动视图的效果。即ScrollView的page数目可以...循环滚动,即ScrollView滚动到最后一页,继续滚动的时候将滚动到第一页。是一个不错的学习例子,喜欢的朋友可以下载学习一下。。
在iOS开发中,轮播图(也称为无限滚动或滑动视图)是一种常见的用户界面元素,用于展示一系列图片、文字或其他内容,并自动循环播放。本篇将详细讲解如何使用`UIScrollView`来实现一个基本的轮播图功能。 首先,...
`- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil`是初始化方法,通常在这里进行自定义的初始化操作,但在这个例子中,我们没有看到具体的初始化内容。 `- (void)...
3. **设置内容偏移**:使用`setContentOffset:animated:`方法来改变`ScrollView`的位置,实现自动滚动。在`NSTimer`的回调中,根据滚动方向调整contentOffset。 4. **监听触摸事件**:通过`addGestureRecognizer:`...