iOS 开发之头部滚动展示视图

效果:

//

//  RootViewController.m

//  头部滚动展示视图

//

//  Created by 寒竹子 on 15/4/1.

//  Copyright (c) 2015年 摩天居士. All rights reserved.

//  头部滚动广告视图

#define SCREEN_SIZE [UIScreen mainScreen].bounds.size

#define KImageCnt 5

#define KImage_H  250

#import "RootViewController.h"

@interface RootViewController ()<UIScrollViewDelegate>

@property (nonatomic, strong) UIScrollView * scrollView;

@property (nonatomic, strong) UIPageControl * pageControl;

@property (nonatomic, strong) NSTimer * timer;

@end

@implementation RootViewController

/**

*  scrollView

*/

- (UIScrollView *)scrollView

{

if (_scrollView == nil) {

_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_SIZE.width, KImage_H)];

_scrollView.pagingEnabled = YES;

_scrollView.showsHorizontalScrollIndicator = NO;

}

return _scrollView;

}

/**

*  PageControl

*/

- (UIPageControl *)pageControl

{

if (_pageControl == nil) {

_pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.scrollView.frame.size.height - 30, SCREEN_SIZE.width, 20)];

_pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:65 / 255.0 green:168 / 255.0 blue:100/255.0 alpha:1.0];

_pageControl.pageIndicatorTintColor = [UIColor grayColor];

}

return _pageControl;

}

/**

*  初始化UI

*/

- (void)setupUI

{

[self.view addSubview:self.scrollView];

[self.view addSubview:self.pageControl];

CGFloat imageY = 0;

CGFloat imageW = SCREEN_SIZE.width;

CGFloat imageH = KImage_H;

for (int i = 0; i < KImageCnt; i++) {

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * imageW, imageY, imageW, imageH)];

imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"image_%i.jpg", i+1]];

[self.scrollView addSubview:imageView];

}

// 设置scrollView属性

self.scrollView.contentSize = CGSizeMake(KImageCnt * imageW, 0);

self.scrollView.delegate = self;

self.pageControl.numberOfPages = KImageCnt;

// 设置自动播放

[self turnOnTimer];

}

/**

*  打开定时器

*/

- (void)turnOnTimer

{

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(playImage) userInfo:nil repeats:YES];

// 为了防止单线程弊端

[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}

/**

*  关闭定时器

*/

- (void)turnOffTimer

{

[self.timer invalidate];

self.timer = nil;

}

/**

*  自动播放图片

*/

- (void)playImage

{

int i = self.pageControl.currentPage;

if (i == KImageCnt - 1) {

i = -1;

}

i++;

[self.scrollView setContentOffset:CGPointMake(i * self.scrollView.frame.size.width, 0) animated:YES];

}

- (void)viewDidLoad {

[super viewDidLoad];

[self setupUI];

}

#pragma mark - UIScrollViewDelegate

/**

*  用户准备拖拽的时候关闭定时器

*/

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

[self turnOffTimer];

}

/**

*  用户停止拖拽的时候新开启一个定时器

*/

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

[self turnOnTimer];

}

// 判断定时器滚动的时候 判断滚动的位置 以让pageControl显示当前的page

// 在总宽度上加上半个scrollView的宽度 是为了实现拖动到一半时左右的效果

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

self.pageControl.currentPage = (self.scrollView.frame.size.width * 0.5 + self.scrollView.contentOffset.x) / self.scrollView.frame.size.width;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

}

@end

时间: 2024-10-19 16:10:41

iOS 开发之头部滚动展示视图的相关文章

iOS 开发之头部滚动展示视图(转)

// //  RootViewController.m //  头部滚动展示视图 //  头部滚动广告视图 #define SCREEN_SIZE [UIScreen mainScreen].bounds.size #define KImageCnt 5 #define KImage_H  250 #import "RootViewController.h" @interface RootViewController ()<UIScrollViewDelegate> @pr

IOS开发中UITableView(表视图)的性能优化及自定义Cell

IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITableView实现的.UITableView这个控件中的列表的每一行是一个cell,当UITableView中cell数量特别大的时候,由于每次都需要alloc分配内存并初始化,会导致app运行不流畅,所以可以使用苹果提供的几个方法进行优化,我把这个过程记录下来供自己以后查阅. 当然,既然说到优化,那我们

iOS开发之视差滚动视图

首先声明一点,由于自己iOS开发经验有限,这里给下面将要实现的效果起名叫视差滚动视图,自己也不知道是否严谨,等以后有经验了,再来更新吧. 一.需求 有的时候我们可能会有这样一种需求,在一个UITableView的上方放置一个View(为了下面实现方便,这里就叫TopView吧),想要实现的效果是,当滚动UITableView时,让TopView也一起向上滚动:当TopView滚动到一定位置时,不再继续滚动TopView,而只是滚动UITableView. 二.思路 1.开始时的思路是这样的,因为

iOS开发&gt;学无止境 - Cell 里的视图控制器

在每个 iOS 开发者的生涯中,总有一些时候想把一个视图控制器放到一个 tableView 的 cell 中.因为这是一个有用的工具去处理我在视图控制器中的各种复杂视图及繁琐操作,而且很容易想象的一种情况是你想要将一些视图堆在另一些视图上面.另一个常见的应用场景是将 collectionView 放在 cell 里.理想情况下里面的 collectionView 拥有它自己的控制器,这样外面的 tableView 控制器不会受到关联视图和每个 collection view cell 数据的影响

【转】 iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

原文: http://blog.csdn.net/hmt20130412/article/details/34523235 本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的注释) [objc] view plaincopy // //  HMTMainViewController.m //  UIScrollView // //  Created

iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(详细解释都写在了Demo里面的凝视) // // HMTMainViewController.m // UIScrollView // // Created by HMT on 14-6-25. // Copyright (c) 2014年 humingtao. All rights reserved. // #import

iOS开发指南 第7章 视图控制器与导航模式 学习

1 概述 分类:平铺导航模式 标签导航模式 树形导航模式 2 模态视图 必须要一个单独的模态视图控制器 呈现 代码方法:presentViewController:animated:completion: 故事板segue方式 关闭 dismissViewControllerAnimated:completion: 获取navigationBar:拖拽一个 Editor-Embed in-Navigation Controller 创建一个navigation controller interf

iOS开发-微信右侧弹出视图实现

微信首页的+号,点击之后会弹出一个更多的视图,这个视图如何实现呢? 实现该效果可能需要以下技术要点: 1.图片拉伸,通过拉伸图片的中间的较小区域来保持图片的边上的形状 2.仿射变换,用到仿射变换的缩放,平移和合并,视图动画 3.navigationBar的样式设置 实现效果,如下: 本Demo图片来源微信安装包解压得到的图片 实现代码: // // ViewController.m // appXX-微信更多工具栏 // // Created by MRBean on 15/7/27. // C

ios 开发日记 13-剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 时间 2014-06-25 21:45:21  CSDN博客 原文  http://blog.csdn.net/hmt20130412/article/details/34523235 主题 网易iOS开发 本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里