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总结相关推荐

  1. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  2. android自定义组合view,自定义View之组合View

    前言 自定义View是安卓开发中比较重要的一环,很多地方都需要用到自定义View.而自定义View比较常见的一种形式就是组合View,也是比较简单的一种方式.下面通过一个实例来学习一下自定义组合vie ...

  3. 【Android开发】用户界面设计-开发自定义的View

    效果图: Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的.View是所有UI组件的基类(父类),为ViewGroup类是容纳这些UI组件的容器,其本身也是Vi ...

  4. android群英传 自定义滑动view,Android群英传学习之路-View的滑动

    滑动效果是如何产生的? 滑动一个View从本质上来说就是移动一个View,改变其当前的坐标.所以,想要滑动一个View,就必须监听该View的触摸事件,并且根据事件的坐标,不断的改变View的坐标从而 ...

  5. Android XML中引用自定义内部类view的四个why

    今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类v ...

  6. 判断自定义异形view的点击事件是否在绘制区域内

    本文是摘抄自 这篇文章,此处作为记录,以备后期查阅使用.在此感谢原文作者的贡献. 使用recyclerview显示如下所示的列表,其中item是一个自定义六边形view,点击事件会有重叠情况,所以需要 ...

  7. Android中使用自定义的view实现圆形图片的效果

    今天给大家讲的是怎么在xml文件找中通过引用自定义的view实现ImageView的圆形图片效果.首先在你的项目中新建一个类,我给它命名为:CircleImageView:然后在res目录下的valu ...

  8. 自定义波浪View,使头像跟着波浪背景浮动

    先上效果图: 自定义波浪View: 通过正余弦自定义View 实现水波浪效果: double ω = 2 * Math.PI / getWidth();mAbovePath.moveTo(getLef ...

  9. Android_自定义倒计时View

    2016年08月01日新的一周开始了,一篇自定义倒计时View开启了这周的篇章- 国际惯例,效果图如下; 带阴影带指引点的倒计时View,不要被这下过吓到,分析一下,难点其实就是那个白色小圆圈的位置, ...

  10. Android自定义华为睡眠,Android 模仿华为健康自定义 计步View

    通过一个简单的自定义的View,模仿华为健康里面消耗热量和计步的圆弧View,来深入的理解RectF以及 canvas的drawArc方法. 华为健康的View是这样的: 最近写了一些自定义的view ...

最新文章

  1. gulp-load-task 解决 gulpfile.js 过大的问题
  2. scau 1079 三角形(暴力)
  3. 学习Maven之Maven Enforcer Plugin
  4. 8.2.1.10 Nested-Loop Join Algorithms 嵌套循环 关联算法:
  5. python 公众号爬虫_python_爬虫_微信公众号抓取
  6. 分析android动画模块[转]
  7. foreach循环符合就不往下走了_柴油发电机组冷却液循环故障解决方法
  8. C语言Node lt T gt,c语言论坛填空;#includelt;stdio.hgt;# 爱问知识人
  9. 史上最全提现模块案例分解
  10. 微信小程token_微信小程序url与token设置详解
  11. jq 获取当时时间的到秒_js(jQuery)获取时间的方法及常用时间类
  12. 使用jsencrypt实现参数的前端加密
  13. python语言中浮点数_在Python中截断浮点数
  14. 关于城市旅游的HTML网页设计-----郑州(10页) 基于HTML+CSS+JavaScript旅游网站设计与实现 静态HTML旅行主题网页作业
  15. 基于JEECG框架,前台VUE,后台java,导入导出
  16. 坚果pro官方固件_锤子坚果Pro(OD103)刷机包_线刷包_救砖包_官方ROM包_固件包下载- 线刷宝ROM中心...
  17. 数据分析师的工作绩效到底是什么?
  18. 全网通拓扑图之聚合链路
  19. Dremel made simple with Parquet (Parquet 原理分析)
  20. AI遮天传 ML-KNN

热门文章

  1. VTK:可视化算法之CarotidFlowGlyphs
  2. VTK:PolyData之WarpVector
  3. VTK:几何对象之IsoparametricCellsDemo
  4. OpenCV高动态范围成像
  5. OpenGL depthclamp深度夹紧实例
  6. C语言数据结构与算法
  7. micropython文件上传软件_ESP32玩转MicroPython(二) 连接WIFI网络 webperl文件传输
  8. 13.8.可视化虚拟机工具--Jconsole内存监控、13.9.可视化虚拟机工具--Jconsole线程监控、13.10.死锁原理以及可视化虚拟机工具--Jconsole线程
  9. Sentry UDFWhiteList bug分析
  10. putty上传文件到linux_基于windows安装部署putty小工具及相关功能介绍