几个经常需要自定义的View总结
2019独角兽企业重金招聘Python工程师标准>>>
几个经常需要自定义的组件:UIScrollview、UItextView、UIButton
分类: Iphone应用开发 2011-12-28 15:13 136人阅读 评论(0) 收藏 举报
为了独立出组件的一些功能,如,为UIbutton切换背景图片,我们经常需要自定义一些组件,下面是我经常用到的,先总结出来,以后会慢慢更新:
-:UIScroview
srollview的事件经常与其子view事件冲突,截断子view事件的相应
//传递touch事件
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
if(!self.dragging)
{
[[selfnextResponder]touchesBegan:toucheswithEvent:event];
}
[supertouchesBegan:touches withEvent:event];
// NSLog(@"MyScrollView touch Began");
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!self.dragging)
{
[[selfnextResponder]touchesMoved:toucheswithEvent:event];
}
[supertouchesMoved:touches withEvent:event];
}
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
if(!self.dragging)
{
[[selfnextResponder]touchesEnded:toucheswithEvent:event];
}
[supertouchesEnded:touches withEvent:event];
}
[plain] view plaincopy
//父视图是否可以将消息传递给子视图,yes是将事件传递给子视图,则不滚动,no是不传递则继续滚动
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
if ([view isKindOfClass:[CustomUITextViewclass]])
{
return YES;
}
else
{
returnNO;
}
}
//Yes是子视图取消继续接受touch消息(可以滚动),NO是子视图可以继续接受touch事件(不滚动)
//默认的情况下当view不是一个UIControlo类的时候,值是yes,否则是no
//调用情况是这样的一般是在发送tracking messages消息后会调用这个函数,来判断scroll是否滚动,还是接受子视图的touch事件
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
NSLog(@"用户点击的视图 %@",view);
returnNO;
}
二:UITextView默认是没有边框的,可以给它加个凹下去的边框
-(void) drawRect:(CGRect)rect {
[self.layersetBackgroundColor: [[UIColorwhiteColor]CGColor]];
[self.layersetBorderColor: [[UIColorgrayColor]CGColor]];
[self.layersetBorderWidth:1.0];
[self.layersetCornerRadius:8.0f];
[self.layersetMasksToBounds:YES];
UIGraphicsBeginImageContext(self.frame.size);
CGContextRef currentContext =UIGraphicsGetCurrentContext();
CGContextSetLineWidth(currentContext, 2.0);
CGContextSetRGBStrokeColor(currentContext, 0.6,0.6,.6, 1.0);
CGRect myRect = CGContextGetClipBoundingBox(currentContext);
float myShadowColorValues[] = {0,0,0,1};
CGColorSpaceRef myColorSpace =CGColorSpaceCreateDeviceRGB();
CGColorRef colorRef = CGColorCreate(myColorSpace, myShadowColorValues);
CGContextSetShadowWithColor(currentContext, CGSizeMake(-1,1),2, colorRef);
CGContextStrokeRect(currentContext, myRect);
UIImage *backgroundImage = (UIImage *)UIGraphicsGetImageFromCurrentImageContext();
UIImageView *myImageView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,self.frame.size.width,self.frame.size.height)];
[myImageView setImage:backgroundImage];
[selfaddSubview:myImageView];
[myImageView release];
UIGraphicsEndImageContext();
}
三:我们会想按下按钮时,切换button的图片背景,可以给UIbutton加个UIControllEvent事件的消息通知,当按钮被按下的时候,通知按钮所有者去切换图片
- (id)initWithFrame:(CGRect)_frame {
if (self = [superinitWithFrame:_frame]) {
[selfaddTarget:selfaction:@selector(touchDown:)forControlEvents:UIControlEventTouchDown];
[selfaddTarget:selfaction:@selector(touchUpInside:)forControlEvents:UIControlEventTouchUpInside];
//[selfaddTarget:selfaction:@selector(touchUpOutside:)forControlEvents:UIControlEventTouchUpOutside];
}
returnself;
}
- (void)touchDown:(id)sender {
NSNotification *notification = [NSNotificationnotificationWithName:@"TouchDownButton"object:selfuserInfo:nil];
[[NSNotificationCenterdefaultCenter]postNotification:notification];
NSLog(@"%s",__FUNCTION__);
}
- (void)touchUpInside:(id)sender {
//[self setBackgroundImage:@"next.png" forState:UIControlStateNormal];
NSNotification *notification = [NSNotificationnotificationWithName:@"TouchUpButton"object:selfuserInfo:nil];
[[NSNotificationCenterdefaultCenter]postNotification:notification];
}
使用方法
在所有者类中定义这些自定义的组件,如定义
CustomerButton *nextButton;
监听消息
[notification addObserver:self selector:@selector(touchDownNext) name:@"TouchDownButton" object:nil];
[notification addObserver:self selector:@selector(touchUpNext) name:@"TouchUpButton" object:nil];
监听到后需要执行的动作
-(void)touchDownNext{
UIImage *image = [UIImageimageNamed:@"next_pressed.png"];
[nextButtonsetBackgroundImage:imageforState:UIControlStateHighlighted];
}
-(void)touchUpNext{
UIImage *image = [UIImageimageNamed:@"next.png"];
[nextButtonsetBackgroundImage:imageforState:UIControlStateNormal];
}
转载于:https://my.oschina.net/u/2473136/blog/516177
几个经常需要自定义的View总结相关推荐
- android sqlite自定义函数,Android中自定义一个View的方法详解
本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...
- android自定义组合view,自定义View之组合View
前言 自定义View是安卓开发中比较重要的一环,很多地方都需要用到自定义View.而自定义View比较常见的一种形式就是组合View,也是比较简单的一种方式.下面通过一个实例来学习一下自定义组合vie ...
- 【Android开发】用户界面设计-开发自定义的View
效果图: Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的.View是所有UI组件的基类(父类),为ViewGroup类是容纳这些UI组件的容器,其本身也是Vi ...
- android群英传 自定义滑动view,Android群英传学习之路-View的滑动
滑动效果是如何产生的? 滑动一个View从本质上来说就是移动一个View,改变其当前的坐标.所以,想要滑动一个View,就必须监听该View的触摸事件,并且根据事件的坐标,不断的改变View的坐标从而 ...
- Android XML中引用自定义内部类view的四个why
今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类v ...
- 判断自定义异形view的点击事件是否在绘制区域内
本文是摘抄自 这篇文章,此处作为记录,以备后期查阅使用.在此感谢原文作者的贡献. 使用recyclerview显示如下所示的列表,其中item是一个自定义六边形view,点击事件会有重叠情况,所以需要 ...
- Android中使用自定义的view实现圆形图片的效果
今天给大家讲的是怎么在xml文件找中通过引用自定义的view实现ImageView的圆形图片效果.首先在你的项目中新建一个类,我给它命名为:CircleImageView:然后在res目录下的valu ...
- 自定义波浪View,使头像跟着波浪背景浮动
先上效果图: 自定义波浪View: 通过正余弦自定义View 实现水波浪效果: double ω = 2 * Math.PI / getWidth();mAbovePath.moveTo(getLef ...
- Android_自定义倒计时View
2016年08月01日新的一周开始了,一篇自定义倒计时View开启了这周的篇章- 国际惯例,效果图如下; 带阴影带指引点的倒计时View,不要被这下过吓到,分析一下,难点其实就是那个白色小圆圈的位置, ...
- Android自定义华为睡眠,Android 模仿华为健康自定义 计步View
通过一个简单的自定义的View,模仿华为健康里面消耗热量和计步的圆弧View,来深入的理解RectF以及 canvas的drawArc方法. 华为健康的View是这样的: 最近写了一些自定义的view ...
最新文章
- gulp-load-task 解决 gulpfile.js 过大的问题
- scau 1079 三角形(暴力)
- 学习Maven之Maven Enforcer Plugin
- 8.2.1.10 Nested-Loop Join Algorithms 嵌套循环 关联算法:
- python 公众号爬虫_python_爬虫_微信公众号抓取
- 分析android动画模块[转]
- foreach循环符合就不往下走了_柴油发电机组冷却液循环故障解决方法
- C语言Node lt T gt,c语言论坛填空;#includelt;stdio.hgt;# 爱问知识人
- 史上最全提现模块案例分解
- 微信小程token_微信小程序url与token设置详解
- jq 获取当时时间的到秒_js(jQuery)获取时间的方法及常用时间类
- 使用jsencrypt实现参数的前端加密
- python语言中浮点数_在Python中截断浮点数
- 关于城市旅游的HTML网页设计-----郑州(10页) 基于HTML+CSS+JavaScript旅游网站设计与实现 静态HTML旅行主题网页作业
- 基于JEECG框架,前台VUE,后台java,导入导出
- 坚果pro官方固件_锤子坚果Pro(OD103)刷机包_线刷包_救砖包_官方ROM包_固件包下载- 线刷宝ROM中心...
- 数据分析师的工作绩效到底是什么?
- 全网通拓扑图之聚合链路
- Dremel made simple with Parquet (Parquet 原理分析)
- AI遮天传 ML-KNN
热门文章
- VTK:可视化算法之CarotidFlowGlyphs
- VTK:PolyData之WarpVector
- VTK:几何对象之IsoparametricCellsDemo
- OpenCV高动态范围成像
- OpenGL depthclamp深度夹紧实例
- C语言数据结构与算法
- micropython文件上传软件_ESP32玩转MicroPython(二) 连接WIFI网络 webperl文件传输
- 13.8.可视化虚拟机工具--Jconsole内存监控、13.9.可视化虚拟机工具--Jconsole线程监控、13.10.死锁原理以及可视化虚拟机工具--Jconsole线程
- Sentry UDFWhiteList bug分析
- putty上传文件到linux_基于windows安装部署putty小工具及相关功能介绍