- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章iOS自定义UIScrollView的滚动条实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
uiscrollview有自己默认的滚动条,可设置隐藏和显示,但是有时候这个默认的滚动条没办法满足我们的需求,那这时候只能通过自定义来实现了。 实现自定义滚动条需要解决的主要问题是:
在scrollview滚动的过程中如何改变滚动条的位置,进而确保滚动条和scrollview在相同时间内走完自己的位移,只要把这个问题解决好了,那我们就可以优雅的自定义滚动条了.
那如何解决这个滚动条的当前滚动位移呢?我们知道,uiscrollview有一个滚动范围,滚动条也有一个滚动范围,也就是说两者的最大的滚动位移是固定的,那要想两者在相同时间内走完自己的位移,只需要确保两者的当前滚动位移和总位移之比一致就行。也就是说:
scrollview的当前位移/scrollview的总位移=滚动条的当前位移/滚动条的总位移 。
得到这个关系后,想要知道滚动条的当前位移,就不是什么难事了。我们可以通过uiscrollview的代理方法获取scrollview的当前滚动位移,scrollview的总位移和滚动条的总位移是固定的,那显然我们可以方便的得出滚动条的当前位移,这样,得到了滚动条的当前位移,我们就可以通过改变滚动条的frame,进而实现让滚动条跟随scrollview滚动.
但是这里需要注意一点,因为这个位移是相对位移,所以在修改滚动条的frame时,要记得加上滚动条距离相对的参考系的左边距离,这样才是其真正的位移。比如现在滚动条的x是从屏幕左边15开始的,滚动条的滚动范围是屏幕宽度减去30,那么当你以屏幕宽度减去30这个数值作为滚动条的滚动总位移,进而算出滚动条的当前位移时,需要加上距离左边的15才是滚动条真正的位移.
接下来看一下代码的具体实现吧:
1、创建scrollview:(记得签代理uiscrollviewdelegate) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-(uiscrollview *)scrollview{
if
(!_scrollview) {
_scrollview = [[uiscrollview alloc] initwithframe:cgrectmake(0, 164, self.view.frame.size.width, 233)];
_scrollview.delegate = self;
_scrollview.scrollenabled = yes;
_scrollview.bounces = no;
_scrollview.showshorizontalscrollindicator=no;
_scrollview.layer.shadowcolor = [uicolor redcolor].cgcolor;
//shadowcolor阴影颜色
_scrollview.layer.shadowoffset = cgsizemake(0,0);
//shadowoffset阴影偏移,x向右偏移,y向下偏移
_scrollview.layer.shadowopacity = 0.5;
//阴影透明度,默认0
_scrollview.layer.shadowradius = 3;
//阴影半径,默认3
}
return
_scrollview;
}
|
2、创建自定义的滚动条以及在scrollview上加点内容:
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
|
-(
void
)loadview{
[super loadview];
[self.view addsubview:self.scrollview];
slidebackview=[[uiview alloc] initwithframe:cgrectmake(15, _scrollview.frame.origin.y+_scrollview.frame.size.height+20, self.view.frame.size.width-30, 8)];
[self.view addsubview:slidebackview];
slidebackview.backgroundcolor = [uicolor colorwithred:0.91 green:0.91 blue:0.91 alpha:1.00];
slidebackview.layer.cornerradius = 4;
sliderview = [[uiview alloc] init];
[self.view addsubview:sliderview];
sliderview.frame=cgrectmake(slidebackview.frame.origin.x, slidebackview.frame.origin.y+(slidebackview.frame.size.height-7 )/2, 40 , 7 );
sliderview.backgroundcolor =[uicolor colorwithred:0.12 green:0.72 blue:0.88 alpha:1.00];
sliderview.layer.cornerradius = 3.5;
nsarray *textdesarr=@[@
"• 产品战略规划:市场目标、用户目标、关键成功要素分析、管理和运用自己的资源来达成目标\n• 产品战略实施:有损原则、平衡原则、聚焦原则\n• 产品需求文档:实例讲解,牛逼的需求文档是怎么诞生的\n• 主动:战略思考、资源争取\n• 推动:项目立项、迭代跟踪\n• 沟通:上传下达、思想一统\n• 平衡:各方协调、跨部沟通\n• 把控:管理得法、取舍有道"
,
@
"• 用户思维:具体案例解析\n• 运营思维:具体案例解析\n• 数据思维:具体案例解析\n• 产品经理的用研能力模型\n• 用户研究基本概念解析\n• 用研基础搭建及建设\n• 用研人员分工及工作职责细分"
@
"• 常用用户研究方法详解\n• 桌面研究、定性研究、定量研究三种方法举例讲解及详细步骤解析\n• 卡诺模型\n• 战略级的市场及用户研究\n• 以科学的方法在产品整个生命周期中进行“研究”"
,
@
"• 品生命周期用户研究侧重点以及研究方法解读\n• 产品用研规划建立\n• 在产品不同生命周期,侧重不同用研方法,更准确进行产品迭代"
,
@
"• 格局:大格局思维,聚焦做实事\n• 决策:让琐碎的运营变有趣,“舍得”之道\n• owner精神:有狼性\n• 敏锐:“细节”出真知\n• 商业素养"
,
@
"• 高情商:做个让人感觉“舒适”的资深运营\n• 凝聚力:1+1>2,善用团队用人所长,没有完美的个人,只有优秀的团队\n• 影响力:在互联网领域成为运营专家,沉淀经验,让成功有迹可循\n• 知识传承力:资深运营的价值,不是个人优秀,而是让人人优秀。"
,
@
"• 数据运营体系的构成\n• 数据规范与平台\n• 数据运营体系结构\n• 数据数据平台构建\n• 核心数据指标\n• 移动端产品数据埋点范例\n• 数据需求指标\n• 产品关键数据\n• 数据运营体系的构成"
,
];
nsinteger contentcount=textdesarr.count;
for
(nsinteger i = 0; i <contentcount; i++) {
uilabel *textdeslabel=[[uilabel alloc] initwithframe:cgrectmake(10+190 *i,0, 180 , 233 )];
[_scrollview addsubview:textdeslabel];
textdeslabel.textcolor=[uicolor colorwithred:0.49 green:0.49 blue:0.49 alpha:1.00];
textdeslabel.font = [uifont systemfontofsize:12 ];
textdeslabel.text = textdesarr[i];
textdeslabel.numberoflines = 0;
textdeslabel.layer.borderwidth = 0.5;
textdeslabel.layer.bordercolor = [uicolor colorwithred:0.91 green:0.91 blue:0.91 alpha:1.00].cgcolor;
textdeslabel.backgroundcolor = [uicolor whitecolor];
}
//scrollview的滚动范围
_scrollview.contentsize = cgsizemake(190*contentcount+10, 0);
}
|
3、在uiscrollview的代理滚动方法中修改滚动条的当前位移:
这里是以自定义横向滚动条为例,竖向滚动条也是一样的原理.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-(
void
)scrollviewdidscroll:(uiscrollview *)scrollview{
[uiview animatewithduration:0.5 animations:^{
cgpoint offset = scrollview.contentoffset;
// scrollview的当前位移/scrollview的总位移=滑块的当前位移/滑块的总位移
// offset/(scrollview.contentsize.width-scrollview.frame.size.width)=滑块的位移/(slidebackview.frame.size.width-sliderview.frame.size.width)
// 滑块距离屏幕左边的距离加上滑块的当前位移,即为滑块当前的x
cgrect frame=sliderview.frame;
frame.origin.x=15 + offset.x*(slidebackview.frame.size.width-sliderview.frame.size.width)/(scrollview.contentsize.width-scrollview.frame.size.width);
sliderview.frame = frame;
}];
}
|
这样,自定义的滚动条就实现了。效果如图 。
另外,在这里提一下阴影的使用方法,有时候我们需要加一些阴影效果,怎么加呢?
主要用到layer的shadowcolor(阴影颜色) 、shadowoffset ()阴影大小、hadowopacity (阴影透明度)、shadowradius(阴影圆角)这几个属性 。
如:
1
2
3
4
|
_scrollview.layer.shadowcolor = [uicolor redcolor].cgcolor;
//shadowcolor阴影颜色
_scrollview.layer.shadowoffset = cgsizemake(0,0);
//shadowoffset阴影偏移,x向右偏移,y向下偏移
_scrollview.layer.shadowopacity = 0.5;
//阴影透明度,默认0
_scrollview.layer.shadowradius = 3;
//阴影半径,默认3
|
下载地址:customscrollviewsliderview.rar 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.jianshu.com/p/c3a82ee318c8 。
最后此篇关于iOS自定义UIScrollView的滚动条实例代码的文章就讲到这里了,如果你想了解更多关于iOS自定义UIScrollView的滚动条实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如果附加了 'not-scroll' 类,我希望我的 body 不滚动,否则它应该正常工作。 我已经搜索这个问题两天了,但找不到任何适合我的解决方案。 我想要的是向 body 添加一个 class,并
我发现似乎是 iOS Safari 中的错误(我正在 iOS 8 上进行测试)。当绝对定位的 iFrame 漂浮在一段可滚动内容上方时,滚动 iFrame 也会滚动下面的内容。以下 HTML (ava
我有以下代码来显示一系列投资组合图片,这些图片以 SVG 格式存储在滚动 div 中: 在 Safari 中滚动使用两根手指或鼠标滚轮当光标位于 SVG 之一上时不起作用。 该页
我想用 javascript 做的是: 一旦你向下滚动页面,将#sidebar-box-fixed 的位置从 position: relative; 更改为定位:固定;。改回position:rela
我对 Elasticsearch 的滚动功能有点困惑。在 elasticsearch 中,每当用户在结果集上滚动时,是否可以每次调用搜索 API?来自文档 "search_type" => "scan
我试图做到这一点,以便当我向上或向下滚动页面时,它会运行不同的相应功能。我发现了一个类似的问题here但我已经尝试了他们的答案并且没有运气。 注意:此页面没有正常显示的滚动条。没有地方可以滚动。 bo
(C语言,GTK库) 在我的表单上,我有一个 GtkDrawingArea 小部件,我在上面使用 Cairo 绘制 GdkPixbufs(从文件加载)。我想要完成的是能够在窗口大小保持固定的情况下使用
最近我一直在尝试创建一个拉到(刷新,加载更多)swiftUI ScrollView !!,灵感来自 https://cocoapods.org/pods/SwiftPullToRefresh 我正在努
我正在开发一个应用程序,其中有两个带有可放置区域的列表和一个带有可拖动项目的侧面菜单。 当我滚动屏幕时,项目的位置困惑。 我试图在谷歌上寻找一些东西,最后得到了这个问题:jQuery draggabl
我在 UIWebView 中加载了一个 HTML 表单,而我的 UIWebView 恰好从 View 的中间开始并扩展。我必须锁定此 webView 不滚动并将其放在 ScrollView 之上以允许
如何在每个元素而不是整个元素上应用淡入淡出(与其高度相比)? HTML: CSS: * { padding: 0; margin: 0; box-sizing: border
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
我制作这个程序是为了好玩,但我被卡住了,因为程序在屏幕外运行。如何在不完全更改代码的情况下实现滚动条。 public static void main(String args[]) throws IO
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
使用 jquery 技术从 css-tricks.com 获得滚动/跟随侧边栏,如果您不知道我在说什么,这里是代码: $(function() { var $sidebar = $
我是 jQuery Mobile 新手。我需要向我的应用程序添加 Facebook 滑动面板功能。 我经历了 sliding menu panel ,它工作正常,但我在菜单面板中的内容超出了窗口大小,
有没有办法在 js 或 jQuery 或任何其他工具中检测 ctrl + 滚动。我正在尝试执行一些动态布局代码,我需要检测不同分辨率下的屏幕宽度,我通过使用 setTimeout() 的计时器实现了这
我有一部分html代码:
我想控制 RichTextBox 滚动,但在控件中找不到任何方法来执行此操作。 这样做的原因是我希望当鼠标光标位于 RichTextBox 控件上时鼠标滚轮滚动有效(它没有事件焦点:鼠标滚轮事件由表单
我是一名优秀的程序员,十分优秀!