- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章iOS实现带有缩放效果的自动轮播图由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了ios带有缩放效果的自动轮播图,供大家参考,具体内容如下 。
可直接设置frame然后加载到视图上使用.
效果就是这样的,图片切换的过程中还是有卡顿,不够流畅,后续更新.
直接上代码.
.h文件包含:
1
2
3
4
5
6
|
#import <uikit/uikit.h>
@interface customscrollview : uiview
@property (strong,nonatomic) nsarray *imagearr;
@end
|
.m文件包含
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
#import "customscrollview.h"
@interface customscrollview ()<uiscrollviewdelegate>
@property (strong,nonatomic) uiscrollview *scrollview;
@property (strong,nonatomic) uiimageview *backimageview;
@property (strong,nonatomic) uiimageview *leftiamgeview;
@property (strong,nonatomic) uiimageview *middleimageview;
@property (strong,nonatomic) uiimageview *rightimageview;
@property (strong,nonatomic) uipagecontrol *pagecontrol;
//高度
@property (assign,nonatomic) cgfloat scrollviewheight;
//手动造成的偏移量
@property (assign,nonatomic) cgfloat offsetx;
@property (strong,nonatomic) nstimer *timer;
//属于计时器方法动画持续时间 ?
@property (assign,nonatomic)
bool
timeranimation;
@end
//左右内容的最大偏移量
#define offset_max ([uiscreen mainscreen].bounds.size.width-64)*0.9
@implementation customscrollview
- (instancetype)initwithframe:(cgrect)frame {
if
(self = [super initwithframe:frame]) {
self.scrollviewheight = frame.size.height;
[self addsubview:self.backimageview];
[self addsubview:self.scrollview];
[self addsubview:self.pagecontrol];
[self.backimageview mas_makeconstraints:^(masconstraintmaker *make) {
make.edges.with.mas_equalto(self);
}];
[self.scrollview mas_makeconstraints:^(masconstraintmaker *make) {
make.edges.with.mas_equalto(self);
}];
[self.pagecontrol mas_makeconstraints:^(masconstraintmaker *make) {
make.left.right.bottom.mas_equalto(self);
make.height.mas_equalto(@20);
}];
self.timer = [nstimer scheduledtimerwithtimeinterval:5 target:self selector:@selector(timeraction) userinfo:nil repeats:yes];
[[nsrunloop mainrunloop] addtimer:self.timer formode:nsdefaultrunloopmode];
[self.timer setfiredate:[nsdate datewithtimeintervalsincenow:5]];
}
return
self;
}
- (nsarray *)imagearr {
if
(!_imagearr) {
_imagearr = @[@
"timg-0"
,@
"timg-1"
,@
"timg-2"
];
}
return
_imagearr;
}
- (uiimageview *)backimageview {
if
(!_backimageview) {
_backimageview = [[uiimageview alloc] init];
_backimageview.image = [uiimage imagenamed:@
"bg_home"
];
}
return
_backimageview;
}
- (uiscrollview *)scrollview {
if
(!_scrollview) {
_scrollview = [[uiscrollview alloc] init];
_scrollview.showsverticalscrollindicator = no;
_scrollview.showshorizontalscrollindicator = no;
_scrollview.contentsize = cgsizemake(kscreenwidth+2*offset_max, self.scrollviewheight);
[_scrollview setcontentoffset:cgpointmake(offset_max, 0)];
_scrollview.bounces = no;
_scrollview.delegate = self;
_leftiamgeview = [[uiimageview alloc] init];
_leftiamgeview.image = [uiimage imagenamed:self.imagearr[0]];
_leftiamgeview.layer.cornerradius = 5;
_leftiamgeview.layer.maskstobounds = yes;
_middleimageview = [[uiimageview alloc] init];
_middleimageview.image = [uiimage imagenamed:self.imagearr[1]];
_middleimageview.layer.cornerradius = 5;
_middleimageview.layer.maskstobounds = yes;
_rightimageview = [[uiimageview alloc] init];
_rightimageview.image = [uiimage imagenamed:self.imagearr[2]];
_rightimageview.layer.cornerradius = 5;
_rightimageview.layer.maskstobounds = yes;
[_scrollview addsubview:_leftiamgeview];
[_scrollview addsubview:_middleimageview];
[_scrollview addsubview:_rightimageview];
[_leftiamgeview mas_makeconstraints:^(masconstraintmaker *make) {
make.size.mas_equalto(cgsizemake((kscreenwidth-64)*0.9, self.scrollviewheight*0.9));
make.centery.mas_equalto(_scrollview);
make.right.mas_equalto(_middleimageview.mas_left).offset(-20);
}];
[_middleimageview mas_makeconstraints:^(masconstraintmaker *make) {
make.size.mas_equalto(cgsizemake(kscreenwidth-64, self.scrollviewheight));
make.centery.mas_equalto(_scrollview);
make.left.mas_equalto(_scrollview).offset(offset_max+64/2);
}];
[_rightimageview mas_makeconstraints:^(masconstraintmaker *make) {
make.size.mas_equalto(_leftiamgeview);
make.centery.mas_equalto(_scrollview);
make.left.mas_equalto(_middleimageview.mas_right).offset(20);
}];
}
return
_scrollview;
}
- (uipagecontrol *)pagecontrol {
if
(!_pagecontrol) {
_pagecontrol = [[uipagecontrol alloc] init];
_pagecontrol.numberofpages = self.imagearr.count;
_pagecontrol.enabled = no;
_pagecontrol.currentpage = 0;
_pagecontrol.hidesforsinglepage = yes;
_pagecontrol.pageindicatortintcolor = [uicolor whitecolor];
_pagecontrol.currentpageindicatortintcolor = maincolor;
}
return
_pagecontrol;
}
#pragma mark ------------ uiscrollviewdelegate --------
- (
void
)scrollviewdidscroll:(uiscrollview *)scrollview {
if
(self.timeranimation) {
return
;
}
cgfloat offscale = scrollview.contentoffset.x - offset_max;
if
(offscale < 0) {
//右滑
self.leftiamgeview.layer.transformscale = 1 + 1.0/9*(
fabs
(offscale)/offset_max);
self.middleimageview.layer.transformscale = 1 - 0.1*(
fabs
(offscale)/offset_max);
}
else
{
//左滑
self.rightimageview.layer.transformscale = 1 + 1.0/9*(
fabs
(offscale)/offset_max);
self.middleimageview.layer.transformscale = 1 - 0.1*(
fabs
(offscale)/offset_max);
}
}
- (
void
)scrollviewdidenddragging:(uiscrollview *)scrollview willdecelerate:(
bool
)decelerate {
cgpoint offset = scrollview.contentoffset;
self.offsetx = offset.x;
if
((
fabs
(self.offsetx-offset_max) >= offset_max*0.5)) {
if
(!decelerate) {
//替换图片
[self exchangeimage];
}
}
else
{
//回弹复位
[scrollview setcontentoffset:cgpointmake(offset_max, 0) animated:yes];
self.leftiamgeview.layer.transform = catransform3didentity;
self.middleimageview.layer.transform = catransform3didentity;
self.rightimageview.layer.transform = catransform3didentity;
}
}
- (
void
)scrollviewdidenddecelerating:(uiscrollview *)scrollview {
//替换图片
[self exchangeimage];
}
#pragma mark ---------- exchangeimage ------
//替换图片
- (
void
)exchangeimage {
if
(self.offsetx-offset_max < 0) {
//右滑
uiimage *rightimage = self.rightimageview.image;
self.rightimageview.image = self.middleimageview.image;
self.middleimageview.image = self.leftiamgeview.image;
self.leftiamgeview.image = rightimage;
if
(self.pagecontrol.currentpage - 1 < 0) {
self.pagecontrol.currentpage = self.pagecontrol.numberofpages-1;
}
else
{
self.pagecontrol.currentpage -= 1;
}
}
else
{
//左滑
uiimage *leftimage = self.leftiamgeview.image;
self.leftiamgeview.image = self.middleimageview.image;
self.middleimageview.image = self.rightimageview.image;
self.rightimageview.image = leftimage;
if
(self.pagecontrol.currentpage + 1 >= self.pagecontrol.numberofpages) {
self.pagecontrol.currentpage = 0;
}
else
{
self.pagecontrol.currentpage += 1;
}
}
[self.scrollview setcontentoffset:cgpointmake(offset_max, 0)];
self.leftiamgeview.layer.transform = catransform3didentity;
self.middleimageview.layer.transform = catransform3didentity;
self.rightimageview.layer.transform = catransform3didentity;
}
#pragma mark ---------- timer --------
- (
void
)timeraction {
self.offsetx = kscreenwidth+offset_max-64;
self.timeranimation = yes;
[uiview animatewithduration:0.8 animations:^{
[self.scrollview setcontentoffset:cgpointmake(self.offsetx, 0)];
self.rightimageview.layer.transformscale = 10/9.0;
self.middleimageview.layer.transformscale = 0.9;
} completion:^(
bool
finished) {
self.timeranimation = no;
[self exchangeimage];
self.rightimageview.layer.transform = catransform3didentity;
self.middleimageview.layer.transform = catransform3didentity;
}];
}
@end
|
最后调用:
1
2
|
self.scrollview = [[customscrollview alloc] initwithframe:cgrectmake(0, 0, kscreenwidth, 170)];
[self.view addsubview:self.scrollview];
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/NB_Token/article/details/73649517 。
最后此篇关于iOS实现带有缩放效果的自动轮播图的文章就讲到这里了,如果你想了解更多关于iOS实现带有缩放效果的自动轮播图的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想填充 3D 等高线图 (contour3(X,Y,Z)),就像 2D 等高线填充图 (contourf(X,Y,Z))。但我无法弄清楚如何实现这一目标。 contour3 和 surf 的组合不是
我有一个 c3.js 折线图,表示 2 个值的演变。我需要折线图的工具提示是饼图(工具提示 = 另一个 c3.js 图形)。 这是我成功的: http://jsfiddle.net/owhxgaqm/
我有具有结构的 Pandas 数据框: A B 0 1 1 1 2 1 2 3 4 3 3 7 4 6 8 如何生成 Seaborn Violin 图,每列作为其自己的单独
我正在使用 D3DXSPRITE 方法将我的 map 图 block 绘制到屏幕上,我刚刚添加了一个缩放功能,当您按住向上箭头时会放大,但注意到您现在可以看到图 block 之间的间隙,这是一些屏幕截
今天我们开始学习目前学习到的最难最复杂的数据结构图。 简单回顾一下之前学习的数据结构,数组、单链表、队列等线性表中数据元素是一对一关系,而树结构中数据元素是一对多关系,而图结构中数据元素则是多对
1、系统环境如下图: 2、为该系统添加一块新的虚拟硬盘,添加后需重启虚拟机,否则系统不识别;如下图,/dev/sdc 是新添加的硬盘; 3、fdisk /dev/sdc为新硬盘创建分区:
1、nagios简介 nagios是一款开源的电脑系统和网络监视工具,能有效监控windows、linux和unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发
越来越多人开始习惯用手机上网,浏览网页、查看邮件···移动化已经成为互联网发展必然趋势,包括facebook在内的很多互联网公司都将移动广告作为下一个淘金地
1.图片处理 1.圆角图片 复制代码 代码如下: /** * 转换成圆角 * &n
Microsoft SQL Server Management Studio是SQL SERVER的客户端工具,相信大家都知道。我不知道大伙使用导入数据的情况怎么样,反正我最近是遇到过。主要是因为没
debian6系统: 首先先安装mysql吧: 打开终端(root)用户登入 apt-get purge mysql-server-5.5 安装完成后: 默认情况下Mysql只允许本地登录
fedora16英文环境下支持中文输入法的方法 fedora16英文环境下支持FCITX的中文输入法: $ im-chooser 就会出现选择界面,选择第二个就行了。
Net预编译命令 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -? 显示说明 我们需要选择的命令为&n
有的时候电脑出现一些故障有的时候通过将其修改bios设置的方法来解决故障,那么在bios上设置能不能将电脑恢复出厂设置呢?其实也是可以的。方法也很简单的,只要会进入电脑的bios懂的上面英文的意思就
笔者曾介绍过Deepin 将对龙芯进行全面支持,打造最优美龙芯电脑桌面。现在Deepin团队移植工作取得了突破性的成果,Deepin桌面已经在龙芯3A和龙芯3B电脑上成功运行起来了。 以下为龙芯3
在安装一些软件之后,我们的电脑总是会发生一点小变化,不是桌面上多了几个网址图标,就是IE浏览器的默认主页被篡改成乱七八糟的网址。最可气的是,在IE设置中将默认主页改回来后,下次启动Win7后又变了回
“注册表编辑器怎么打开”虽说不是很难的问题,但是对于对电脑常识不是很擅长的网民来说,当电脑出现问题或需要更改设置时,着实还是件头疼的问题。因为需要打开注册表进行操作解决。那么如何打开注册表编辑器呢?
这篇文章重点介绍10个重要的WordPress安全插件和技巧,用来保护WordPress网站或者博客。 1. WP Security 人工帮助你修复被黑客入侵的网站,只要按照他们网站上的联系电话
其实运用object和javascript调用外部文件,也能实现不同栏目调用不同友情链接,即相当于调用不同栏目友情链接文件, {dede:field.typeid/}来获取当前栏目的ID。
我有一个复值矩阵。 如果我发出命令: plot(myMatrix) 然后它在图形设备上显示一种散点图,X 轴标记为 Re(myMatrix),Y 轴标记为 Im(myMatrix)。这显示了我正在寻找
我是一名优秀的程序员,十分优秀!