自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

geeklyc

成长路上

  • 博客(186)
  • 资源 (4)
  • 收藏
  • 关注

原创 01-nginx+rtmp 搭建

编译安装下载 nginx下载 rtmp 和 nginx 同一目录配置 --prefix指定输出路径./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module出现如下错误checking for PCRE library ... foundchecking for PCRE JIT support ... foundchecking for OpenSSL library ... not foundch

2021-09-03 18:28:35 155

原创 03-configure 配置

./configure 配置说明查找相关配置信息 ./configure --help | grep 属性如查找 static./configure --help | grep static支持和禁用一些模块./configure --prefix 安装路径 --disable-xxx --enable-xxx--cc=clang --host-cflags= --host-ldflags帮助选项用于查看 ffmpeg 的能力。选项说明–list-decoder

2021-09-03 18:27:46 548

原创 02-ffmpeg 安装

编译安装针对 macOS 平台编译安装 Xcode需要编译工具链 LLVM。最新版本 AppStore 下载即可,历史版本 官网下载,需要通过AppID 账号登陆。安装 Yasm or NASMYasmYasm 是汇编编译器,ffmpeg 为了提高效率使用了汇编指令,如 MMX 和 SSE 等。所以系统中未安装 yasm时,就会报下面的错误。liyouchengs-MacBook-Pro:ffmpeg lyc$ ./configure --prefix=/usr/local/ffmpegn

2021-09-03 18:26:57 227

转载 UITextView的动态适应高度处理

本文章主要是处理自适应高度的。想到自适应高度,想必大家都知道使用boundingRectWithSize:options:attributes 来计算。嗯确实,这是个利器。其本上能正确返回字体的rect。但对于UITextView 似乎使用此方法计算出来的结果比实际显示的要小。为什么呢?我个人也在网上搜了好多,但都不尽人意。于是乎想是不是UITextView做了些额外的

2016-10-17 10:33:22 507

转载 详释(常见UITextView 输入之字数限制)之一---固定长度

好久没有写文章了,今天上来写写,发现增多了markDown编辑器。挺不错,后续研究一下,今天暂写文章先。好了,不废话。如题,相信大家看到这个标题都不想看文章了,这有什么好说的,网上一搜一大把。好吧,自认为是一搜一大把的跳过,有兴趣的就看完。。。。。。对于限制UITextView输入的字符数。相信大家在网上见得最多的是实现UITextViewDelegate[objc]

2016-10-17 10:31:13 853 1

转载 EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理

有时候,你会遇到由EXC_BAD_ACCESS造成的崩溃。 这篇文章会告诉你什么是EXC_BAD_ACCESS,以及它产生的原因。我还会提供一些EXC_BAD_ACCESS错误的解决方案。1. 什么是 EXC_BAD_ACCESS?一旦你理解EXC_BAD_ACCESS的本质,你就会更好地理解这个模糊的名词。这里有一个极为简单的解释,也有一个技术层面的解释。我们首先从简单的解释开始说起。

2016-02-29 09:11:18 322

转载 iOS的蓝牙连接、数据接收及发送

说明:苹果官方开发文档中涉及一些名词:Central(中心设备)、Peripheral(外围设备)、advertising(广告)、Services(服务)、Characteristic(特征)等,请点击查看我的另一篇翻译目录:步骤1.建立一个Central Manager实例进行蓝牙管理步骤2.搜索外围设备步骤3.连接外围设备步骤4.获得外围设备的服务步骤5.获得

2016-02-19 20:25:10 2017

转载 官方蓝牙4.0基本概念

1.中心设备和外围设备以及它们在蓝牙通讯中的角色。在所有的BLE( Bluetooth low energy,下文简称蓝牙4.0 )通讯中都涉及2个主要的角色:中心设备和外围设备。它是基于传统的客户-服务器(主从式)结构,一般来说,外围设备有其它设备需要的数据,中心设备使用外围设备提供的数据来完成特定的任务。像下图所示,心率监测器有有用的数据,Mac或者iOS APP需要这些数据来显示用户

2016-02-19 17:50:24 998

转载 iOS开发网络篇—XML介绍

iOS开发网络篇—XML介绍一、XML简单介绍XML:全称是Extensible Markup Language,译作“可扩展标记语言”跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例            二、XML的语法1.简单说明

2015-03-10 18:33:05 511

转载 iOS开发网络篇—HTTP协议

iOS开发网络篇—HTTP协议说明:apache tomcat服务器必须占用8080端口一、URL1.基本介绍URL的全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议

2015-03-10 18:13:34 367

转载 TestFlight使用

相信一部分开发者,对于Apple收购TestFlight有着比较好奇的心态,那么TestFlight在被收购后,已经再次重新正式发布,可以正常使用了,那么又有多少开发者会去使用它呢?读完Apple的TestFlight官方文档之后,已经不能阻止我的小宇宙爆发了,开始折腾了起来,大致总结有以下两点:如果可以接受10测试人员,那么就不需要提交审核,意味着不需要Apple的漫

2015-01-19 20:56:02 970

原创 使用FMDataBase

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁、易用的封装库,这一篇文章简单介绍下FMDB的使用。在FMDB下载文件

2014-12-25 09:39:01 547

原创 iOS形成静态库方法

在iOS的开发过程中,我们常常用到第三方的库。尤其是QQ、百度地图、广告等。那么,如何制作自己的库文件呢?如果,将自己写的功能类编译成库文件,分发给其他人来使用呢?静态库的优点编译静态库的好处也还是有的!1.让自己的源码不被直接暴漏。2.需要使用时,仅仅拷贝相应的.h文件和.a文件就好,不用在将源码一一拷贝。方便。3.

2014-12-23 10:27:26 412

原创 iOS 汉字转拼音

在这里我引用了第三方的东西(email:[email protected]):在这里我采用了两种方式(方式二简单,方便使用):- (NSString *)pinYin{//方式一//先转换为带声调的拼音NSMutableString *str = [self mutableCopy];CFStringTransform((C

2014-12-20 18:43:52 409

原创 CocoaAsyncSocket学习

下载地址:https://github.com/robbiehanson/CocoaAsyncSocket(必须使用arc项目)CocoaAsyncSocket支持tcp和udp。其中:AsyncSocket类是支持TCP的AsyncUdpSocket是支持UDP的AsyncSocket是封装了CFSocket和CFSteam的TCP/IP socket网络库。它提

2014-12-20 18:37:03 421

原创 AsyncSocket使用心得

倒入runloop文件夹下的 四个文件即可AsyncSocket *socket=[[AsyncSocketalloc]initWithDelegate:self]; NSError *error; [socket  connectToHost:h onPort:p withTimeout:-1error:&error ];  然后实现一些Del

2014-12-20 17:59:28 541

原创 iOS的Asyncsocket进行socket编程

iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁。在其它OS往往用类来封装的对Socket函数的处理。比如MFC的CAsysncSocket.在iphone也有类似于开源项目.cocoa AsyncSocket库, 官方网站:http://code.google.com/p/cocoaasyncsocket/ 它用来简化CFnetwork的调用.一.在项目引入ASync

2014-12-20 17:51:14 431

原创 AsyncSocket常用方法解释

AsynSocket常用方法解释//在socket连结发生错误的时候,socket被关闭。//在断开之前你可以读取断开之前最后的bit数据//当连接的时候,这个代理的方法可能被执行。-(void) onSocket:(AsyncSocket *) sock willDisConnectWithError:(NSError *)err;//当socket断开或者没有错

2014-12-20 17:41:02 778

原创 UIView详解2

UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为IOS中几乎所有可视化控件都是UIView的子类。负责渲染区域的内容,并且响应该区域内发生的触摸事件UIView的功能 1.管理矩形区域里的内容2.处理矩形区域中的事件3.子视图的管理 4.还能实现动画  UIView的子类也具有这些功能下图就是视图的内层次 

2014-10-08 14:39:23 404

原创 UIView的一些问题

曾经有人这么说过,在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone开发里具有非常重要的作用。那么UIView我们到底知道多少呢。请看看下面的问题,如果这些你都知道,那么本文章的内容就请绕道,如果你还不太清楚,我想看了下面的内容,你就明白了。1。bounds和frame分别表示什么?2。ContentMode里UIViewContentMod

2014-10-08 11:53:49 477

原创 IOS的UIWindow和UIview

一、UIWindow:1、UIWindowLevel总共有三种级别:UIWindowLevleNormal,UIWindowLevelAlert;UIWindowLevelStatusBar;其中normal级别最低,再而是statusBar,级别最高的是alertView,alertView一般用来中断用户事件。打印出他们的值分别是0.0000,1

2014-10-08 11:13:39 433

原创 UIScreen、UIWindow、UIView

UIScreen(屏幕),UIWindow(窗口),UIView(视图)是IOS的三个基本界面元素。UIScreen为硬件设备的屏幕抽象,其中一个属性是整个屏幕区域bounds。UIWindow为内容显示提供背景平台,ios一般只有一个UIWindows,UIView的子类,可以看成特殊的View.UIView负责绝大部分的内容描画,并负责响应用户的交互、管理子视图。

2014-10-08 10:50:21 465

转载 iOS常用设计模式——适配器Adapter

1.什么是适配器设计模式(Adapter)   (What)适配器设计模式是一种结构型设计模式, 它的作用是把一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器设计模式有两种实现方式:1.)通过继承来实现两个接口,叫类适配器; 2.)通过引用来避免对象适配器继承被适配对象,叫对象适配器。图1: 类适配器

2014-10-08 09:37:57 555

转载 iOS常用设计模式——原型模式

1. 什么是原型模式? (what)原型模式属于创建性设计模式,它通过拷贝的方式快速创建一个对象,这里拷贝的方式有两种:1.)浅拷贝(指针拷贝); 2.)深拷贝(值拷贝);采用原型模式创建一个新的对象效率更高。 什么是深拷贝和浅拷贝? (What)深拷贝也叫做值拷贝,新创建的对象会在内存中开辟新的空间,而把被拷贝对象的值拷贝过来;浅拷贝也叫做指针拷贝,新创建的对象的

2014-10-08 09:33:36 380

转载 iOS常用设计模式——单例模式

第一部分: 创建一个单例对象 单例的应用场景:单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据。用单例模式加以控制是非常有必要的。什么是单例模式?单例是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实

2014-10-08 09:28:49 459

转载 iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼。该场景对应的UML图如下所示:图1:简单工厂模式UML图简单工厂模式的参与者: 工厂(Factory)

2014-10-08 09:28:32 1025

原创 正则表达式学习3

ios下的正则表达式,RegexKitLite (2012-03-23 16:49:11)转载▼1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中。
备用地址:http://www.cocoachina.com/bbs/job.php?action-downloa

2014-09-30 15:53:28 427

原创 正则表达式学习2

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,

2014-09-30 15:51:49 390

原创 正则表达式学习1

1. 正则表达式规则普通字符字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。转义字符   一些不便书写的字符,采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。表达式可匹配\r, \n代表回车和换

2014-09-30 15:49:15 380

原创 XMPP学习及使用2

即时消息传递(IM)在临时 Internet 用户和业务用户中都是一个受欢迎的应用程序。它不仅为用户提供了与他人进行实时通信的方法,还能够得到他们的到场信息(在线、离开、离线,等等)。Jabber 是最早的开放 IM 协议之一,由 Jeremie Miller 开发并于 1998 年作为一个非标准 IM 协议出现。由于 Jabber 是使用 XML 创建的可扩展协议,它很快就创建了其他可用作通用传

2014-09-29 17:20:49 591

原创 XMPP学习及使用1

XMPP 简介本小节将简要介绍 XMPP,它的起源,以及为何它是一个适合实时 web 通信的协议。您将检查 XMPP 通信设置的组件,并查看展示这些组件如何使用的示例。Web 标准和 XMPPXMPP 是一组基于 XML 的技术,用于实时应用程序。最初,XMPP 作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。当时的即时消息传递网络是私有的,非常不适

2014-09-29 17:04:59 940

转载 手势识别

感觉有必要把iOS开发中的手势识别做一个小小的总结。在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextView中的手是用storyboard添加的。下面会先给出 如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单。和button的用法类似,也是

2014-09-24 09:21:11 1050

转载 UITableView详解

在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信、QQ、新浪微博等软件基本上随处都是UITableView。当然它的广泛使用自然离不开它强大的功能,今天这篇文章将针对UITableView重点展开讨论。今天的主要内容包括:1.基本介绍2.数据源3.代理4.性能优化5.UITableViewC

2014-09-24 09:14:22 524

转载 iOS网络编程-iOS中解析Bonjour服务

服务器端Bonjour服务发布成功之后,客户端可以通过NSNetService解析服务,解析成功后,可以获得通讯的数据细节,如:IP地址、端口等信息。首先需要实例化NSNetService对象代码如下:[cpp] view plaincopy-(id)init {    _service = [[NSNetService alloc]

2014-09-22 14:31:50 477

转载 iOS网络编程实践--NSStream实现TCP Socket iPhone客户端

客户端我们使用iPhone应用程序,画面比较简单。点击发送按钮,给服务器发送一些字符串过去。点击接收按钮就会从服务器读取一些字符串,并且显示在画面上。有关客户端应用的UI部分不再介绍了,我们直接看代码部分,Socket客户端可以采用CFStream或NSStream实现。为了给读者介绍更多的知识,本例我们采用NSStream实现。NSStream实现采用Objective-

2014-09-22 14:26:06 393

转载 iOS网络编程-iOS中Socket编程介绍

使用Socket进行C/S结构编程,连接过程 服务器端监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器端发出连接请求,服务器端接受请求程序才能向下运行。一旦连接建立起来,通过Socket可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通讯,最后不要忘记关闭Socket和释放一些资源(包括:关闭输入输出流)。客户端流程是先指定要通讯

2014-09-19 15:44:42 374

转载 iOS网络编程实践--蓝牙对等网络通信实例讲解

基于蓝牙对等网络通信就是使用Game Kit中的GKSession、GKSessionDelegate、GKPeerPickerController和GKPeerPickerControllerDelegate来实现。开发过程分为3个步骤:连接、发送数据和接收数据。下面我们通过一个实例介绍一下基于蓝牙对等网络通信过程。用户点击“连接”按钮,建立连接过程中会出现连接对话框,根据具体情况也会弹

2014-09-19 15:09:02 394

转载 iOS网络编程-MBProgressHUD等待指示器

第三方的等待指示器,MBProgressHUD就是第三方提供的等待指示器框架。下面是MBProgressHUD提供的等待指示器样式,它们基本可以分为:未知结束时间和已知结束时间两大类等待指示器,在MBProgressHUD中可以为等待指示器添加标签和详细标签MBProgressHUD的下载地址是https://github.com/matej/MBProgressH

2014-09-19 15:03:54 427

转载 iOS网络编程-ASIHTTPRequest小例子-数据请求队列

实例:请求队列我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。 我们直接看看主视图控制器ViewController.h代码如下:[cpp] view plaincopy#import “ASIHTTPRequest.h”    #import “AS

2014-09-19 14:59:32 330

转载 iOS网络编程-ASIHTTPRequest异步请求

我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。ASIHTTPRe

2014-09-19 14:58:39 378

Swift-开发者必备Tips

单例 闭包 泛型拓展 Core Data 断言和异常处理 JSON和Codeable

2018-10-11

Swift-App架构

介绍 App设计模式概览 Model-View-Controller Model-View-ViewModel+协调器(MVVM-C) 网络 Model-View-Controller+ViewState Model适配器-View绑定器

2018-10-11

UIScrollView图片定时滚动和点击

UIScrollView图片定时滚动和点击

2014-07-02

UIScrollView定时滚动和循环滚动,可点击图片和PageController

定时滚动和循环滚动,可点击图片和PageController #import "ASIFormDataRequest.h" #import "GWPublicClass.h" @interface ViewController ()<UIScrollViewDelegate> @end @implementation ViewController { UIScrollView * headScrollView; UIPageControl * pageControl; NSArray * colorArray; NSTimer * myTimer; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } #pragma UIScrollView delegate -(void)scrollToNextPage:(id)sender { int pageNum = pageControl.currentPage; CGSize viewSize = headScrollView.frame.size; CGRect rect = CGRectMake((pageNum+2)*viewSize.width, 0, viewSize.width, viewSize.height); [headScrollView scrollRectToVisible:rect animated:NO]; pageNum++; if (pageNum == colorArray.count) { CGRect newRect=CGRectMake(viewSize.width, 0, viewSize.width, viewSize.height); [headScrollView scrollRectToVisible:newRect animated:NO]; } } -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat pageWidth = headScrollView.frame.size.width; int currentPage = floor((headScrollView.contentOffset.x-pageWidth/2)/pageWidth)+1; if (currentPage == 0) { pageControl.currentPage = colorArray.count-1; }else if(currentPage == colorArray.count+1){ pageControl.currentPage=0; } pageControl.currentPage = currentPage-1; } -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [myTimer invalidate]; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { myTimer=[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(scrollToNextPage:) userInfo:nil repeats:YES]; } -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { CGFloat pageWidth = headScrollView.frame.size.width; CGFloat pageHeigth = headScrollView.frame.size.height; int currentPage=floor((headScrollView.contentOffset.x-pageWidth/2)/pageWidth)+1; NSLog(@"the current offset==%f",headScrollView.contentOffset.x); NSLog(@"the current page==%d",currentPage); if (currentPage == 0) { [headScrollView scrollRectToVisible:CGRectMake(pageWidth*colorArray.count, 0, pageWidth, pageHeigth) animated:NO]; pageControl.currentPage = colorArray.count-1; NSLog(@"pageControl currentPage==%d",pageControl.currentPage); NSLog(@"the last image"); return; }else if(currentPage == [colorArray count]+1){ [headScrollView scrollRectToVisible:CGRectMake(pageWidth, 0, pageWidth, pageHeigth) animated:NO]; pageControl.currentPage=0; NSLog(@"pageControl currentPage==%d",pageControl.currentPage); NSLog(@"the first image"); return; } pageControl.currentPage=currentPage-1; NSLog(@"pageControl currentPage==%d",pageControl.currentPage); } - (void)pageTurn:(UIPageControl *)sender { int pageNum = pageControl.currentPage; CGSize viewSize = headScrollView.frame.size; [headScrollView setContentOffset:CGPointMake((pageNum+1)*viewSize.width, 0)]; NSLog(@"myscrollView.contentOffSet.x==%f",headScrollView.contentOffset.x); NSLog(@"pageControl currentPage==%d",pageControl.currentPage); [myTimer invalidate]; } - (void)handleTapGesture:(UITapGestureRecognizer*)gesture { NSLog(@"UITapGesture被调用了%d",gesture.view.tag); // ... } - (void)viewDidLoad { [super viewDidLoad]; colorArray = @[[UIColor redColor],[UIColor greenColor],[UIColor blueColor]]; headScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 80, 320, 200)]; headScrollView.backgroundColor = [UIColor blackColor]; [self.view addSubview:headScrollView]; CGFloat Width= 320; CGFloat Height= 200; UIImageView * firstImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Width, Height)]; firstImageView.userInteractionEnabled = YES; firstImageView.tag = 50+colorArray.count-1; firstImageView.backgroundColor = colorArray[colorArray.count-1]; [headScrollView addSubview:firstImageView]; UITapGestureRecognizer * gestd = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; [firstImageView addGestureRecognizer:gestd]; for (int i=0; i<colorArray.count; i++) { UIImageView * subImageView=[[UIImageView alloc] initWithFrame:CGRectMake(Width*(i+1), 0, Width, Height)]; subImageView.backgroundColor = colorArray[i]; subImageView.userInteractionEnabled = YES; subImageView.tag = 50+i; subImageView.frame=CGRectMake(Width*(i+1), 0, Width, Height); [headScrollView addSubview: subImageView]; UITapGestureRecognizer * gestd = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; [subImageView addGestureRecognizer:gestd]; } UIImageView * lastImageView = [[UIImageView alloc] initWithFrame:CGRectMake(Width*(colorArray.count+1), 0, Width, Height)]; lastImageView.userInteractionEnabled = YES; lastImageView.backgroundColor = colorArray[0]; lastImageView.tag = 50; [headScrollView addSubview:lastImageView]; headScrollView.contentSize = CGSizeMake(Width*(colorArray.count+2), Height); headScrollView.pagingEnabled = YES; headScrollView.delegate = self; [headScrollView scrollRectToVisible:CGRectMake(Width, 0, Width, Height) animated:YES]; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(100, 290, 120, 20)]; pageControl.numberOfPages = colorArray.count; pageControl.backgroundColor = [UIColor greenColor]; pageControl.enabled = YES; pageControl.currentPage = 0; [pageControl addTarget:self action:@selector(pageTurn:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:pageControl]; myTimer=[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(scrollToNextPage:) userInfo:nil repeats:YES]; } - (void)enterDetail { NSLog(@"tap is "); }

2014-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除