操作layer改变UIImageView的外观. 3.1 设置阴影 //UIView本身就自带阴影效果,它是透明....我们设置层的所有属性它只作用在根层上面.对contents里面的东西并不起作用. 所以我们看不到图片有圆角的效果....后面forKeyPath属性值不是乱写的.苹果文档当中给了相关的属性. !...也就是说,CALayer不能处理用户的触摸事件,而UIView可以,但是CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级 如果显示出来的东西需要跟用户进行交互的话,用UIView; 如果不需要跟用户进行交互...2. backgroundColor:背景颜色,修改时产生背景颜色渐变动画效果。 3. position:CALayer的位置,修改时产生平移动画 例: >**如何取消隐式动画?
而很多App的做法其实比较粗糙,类似于我在传送门:iOS导航栏切换界面时隐藏和显示中的做法,需要导航栏透明时,直接将导航栏隐藏起来。...直接隐藏起来的意思是,整个导航栏就用不了了,也就是说,标题、返回按钮等都需要自己去做,这是一个比较麻烦的地方,此外,在有无导航栏的界面间切换时,过程是比较生硬的,导航栏不是渐变出现的。...设置导航栏背景透明度 导航栏上应该是有很多view的,我们要做的是只让背景透明,而保留标题、返回按钮。iOS没有直接给我们提供对于导航栏背景view的访问途径,那么我们只能自己来找了。...有它在岂不是前功尽弃了,再用上面的方法已经不管用了,这条线不在我们找出来的子view之中,通过查资料,要隐藏这跟细线的方法很多,但是要跟我们对导航栏背景的设置不冲突,又要能到只在将导航栏背景设为透明时才隐藏...,我们可以在 UINavigationController 的 Delegate 中添加一个处理,监控松手后时自动完成返回还是取消返回操作,同时使用 UIView 动画(关于 UIView 动画可以看我的这篇文章
iOS在UIView图层中不仅集成了动画的线性渐变方法,而且动画的加速、减速以及复杂的动画变化时间函数、运动路径函数也已经为大家集成好了,所以只需要学会如何使用这些丰富的API即可,且这个功能只需要几行代码就可以实现...在Main.storyboard中为整个工程添加一个已经准备好的背景图片,背景图片依托在UIImageView上。...上图为当前工程的Main.storyboard中图层结构,其中View Controller为整个工程的视图控制器,login为UIImageView登录背景图片。...4 UIView视图中常见动画的属性分析 我们在第2节和第3节主要依靠UIView下的frame属性来实现登录按钮从左到右的进入效果。那么UIView下的其他属性是不是也可以有类似的效果呢?...UIView的x、y坐标,而CGSize中包含了UIView的Width、Height信息。
在思考一个动画的实现方法时,把动画的动作进行分解然后再一个个去思考怎么实现是一个好的习惯,我们稍微分解一下,这个动画在显示大图和收起大图的时候做了这些事情: 打开时先显示一个半透明的阴影背景; 然后显示一个逐渐变大的图片...首先我们定义三个属性,因为我们需要在多个方法中调用,所以定义为类的@property: @property (nonatomic, strong) UIImageView *smallImageView...但是在这之前,我们先来完成大图片和阴影背景的初始化: // 大图视图 - (UIImageView *)bigImageView { if (nil == _bigImageView) {...这里的动画我们使用的是最简单的iOS 7开始支持的基于block的UIView动画,在我的这篇博客中也有详细讲解:iOS基础动画教程 然后,我们初始化了阴影背景视图,并添加到界面上,此时不要忘记,要再次将大图手动推送到最上层...当然了,如果小图的位置不好获取,那就直接设为从屏幕的中点开始缩放,效果也不错。另外,你可能会疑惑为什么我要另行添加一个大图的对象,而不直接对小图的尺寸进行动画呢?
,然后调整alpha可以达到背景渐变的视图效果; UIView的transform是可以用仿射变换矩阵来控制平移、放大缩小等。...= CGAffineTransformMakeScale(1.2, 1.2); }]; 2、匀速运动、交错效果 right是项目封装的一个属性,本质是对UIView的frame进行操作; 两朵云...alpha的变化,但是UIView的block动画不好实现重复效果; UIView的alpha对应的是layer的opacity属性,设定好起始、过度和结束的状态,实现闪烁的效果。...,这时候就要用到帧动画; 帧动画有两种实现方式,一种是通过Timer(定时器),设定好时间间隔,手动替换图片; 另外一种是通过UIImageView的支持,实现帧动画。...UIImageView的帧动画没有回调,如果需要实现达到第几帧之后,开始另外的动画的效果,需要用第一种方法。
;下面是对这三个属性的总结: 1.动画缓冲属性timingFunction 动画实际上就是在一段时间内随着某个特定速率执行变化的过程,现实中的任何物体都会在运动中经历加速或者减速的过程,而不是速度骤变;...九、委托模式下的动画区分 对于CAAnimation而言,使用委托模式而不是一个完成块会带来一个问题,那就是设置多个动画时,无法在回调方法中区分。...,然后在回调用比较,但实际上并不起作用,因为委托传入的动画参数是原始值的一个深拷贝,从而不是同一个值。...十、虚拟属性 属性动画CAPropertyAnimation的keyPath实际上针对的是关键路径而不是一个键,这就意味着属性动画作用的对象可以子属性(即属性的属性)甚至虚拟属性; 那么什么是虚拟属性呢...度的动画; 可以使用相对值而不是绝对值旋转,设置byValue而不是toValue; 可以不用创建CATransform3D,而是使用一个简单的数值来指定角度; 不会和transform.position
UIView 所持有的主 Layer(RootLayer) 实例,我们可以通过其来设置 UIView 没有封装的一些 layer 属性; layerClass 则返回 RootLayer 所使用的类,...iOS 中将该缓存区保存的图片称为 寄宿图。而当设备屏幕进行刷新时,会从 CALayer 中读取生成的 bitmap, 进而呈现到屏幕上。...但是在实践中,如果 content 的值不是 CGImage ,得到的图层将是空白的。 既然如此,为什么要将 contents 的属性类型定义为 id 而非 CGImage。...其实我们平时使用的 UIImage 其实是 CGImage 的一个轻量级封装, 于是很自然的, 在 UIImageView 中的 UIImage 对象直接将自己的 CGImage 图片数据作为 CALayer...但是需要注意我们传给 UIImageView 的 UIImage 中的图片可能是没有解码的,我们渲染流程中会有解码的过程。
特别是如果在我们的界面上有多个这样的UIButton实例,那就会很糟糕了 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431一起交流。...上下文,然后将内存中的数据恢复出来, 再使用 CGContextRef 进行绘制 描述下SDWebImage里面给UIImageView加载图片的逻辑 SDWebImage 中为 UIImageView...当真实图片被加载出来后在替换占位图片 加载图片的过程大致如下: 首先会在 SDWebImageCache 中寻找图片是否有对应的缓存, 它会以url 作为数据的索引先在内存中寻找是否有对应的缓存 如果缓存未找到就会利用通过...MD5处理过的key来继续在磁盘中查询对应的数据, 如果找到了, 就会把磁盘中的数据加载到内存中,并将图片显示出来 如果在内存和磁盘缓存中都没有找到,就会向远程服务器发送请求,开始下载图片 下载后的图片会加入缓存中...,那么控制器就是上一个响应者 如果当前这个view不是控制器的view,那么父控件就是上一个响应者 [1240] 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431
该框架可以用于基于路径的绘图、变换、颜色管理、脱屏渲染,模板、渐变、遮蔽、图像数据管理、图像的创建、遮罩以及PDF文档的创建、显示和分析 Graphics Context Graphics Context...使用UiKit,你只能在当前上下文中绘图,所以如果你当前处于UIGraphicsBeginImageContextWithOptions函数或drawRect:方法中,你就可以直接使用UIKit提供的方法进行绘图...*imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [imageView setImage...视图即UIView,并不是直接显示在屏幕上,而是在创建视图对象的时候视图对象会自动创建一个层,而视图对象把要显示的东西绘制在层上,待到需要显示时硬件将所有的层拷贝,然后按Z轴的高低合成最终的显示结果...:,并传入刚才准备好的上下文 view的drawLayer:inContext:方法内部又会调用view的drawRect:方法 view就可以在drawRect:方法中实现绘图代码, 所有东西最终都绘制到
通过控制UIView的maskView、CALayer的mask有效区域,都可以修改UIView和 UIView的layer的显示外形,从而得到镂空或者其他的奇特形状及其动画。...实现关键点 图层中,因为UIView的layer为CALayer,不像CAShapeLayer那样有Path属性,所以我们无法直接修改layer的的显示形状,唯一能是layer显示出奇特形状的方法只有两种...(2) 当CAShapeLayer的backgroundColor不是clearColor的时候,CAShapeLayer的显示区域就是它本身的Frame,跟它的path区域就没关系了。...,所以它里面的path形成的波浪便不再显示,而 self.waveCosLayer的背景设置为clearColor就可以看见它的蓝色波浪了。...背景clear.gif 设置了self.waveSinLayer的背景和self.waveCosLayer的背景都为clearColor。 ?
init]]; [[UITabBar appearance] setBackgroundImage:[[UIImage alloc]init]]; 设置tabbar item原始图标与原始选中图标,而不是系统自动填充的颜色...UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, Main_Screen_Width, 49)]; backView.backgroundColor...; [self.tabBar insertSubview:backView atIndex:0]; self.tabBar.opaque = YES; 设置tabbar item选中时的背景图片...tabBar的subViews, 找到tabBar中的这个view, 是一个UITabBarSelectionIndicatorView的view,然后把它替换成你自己创建的UIImageView, 上例中的...然后需要把UITabBarController的delegate设为self, 在tabBarController:didSelectViewController的代理方法中执行上面的方法:[self
= 50; 3、如何操作layer改变UIImageView的外观? ...这是因为UIImageView当中Image并不是直接添加在层上面的,这是添加在layer当中的contents里。...UIImageView中是UIView的主layer上添加了一个次layer(用来绘制contents),我们设置边框的是主layer,但是次layer在上变,不会有任何的影响,所以当我们调用切割语句的时候...我们设置层的所有属性它只作用在层上面,对contents里面的东西并不起作用,所以如果我们不进行裁剪,我们是看不到图片的圆角效果的。...也就是说,CALayer不能处理用户的触摸事件,而UIView可以。
现在让我们添加我们的行。它们也都是UIImageView,所以也只用直接在背景图片上放置就可以了。...,现在只显示了背景图片。...持续时间是动画完成需要的时间,而阻尼是iOS 7在UIView动画方法中提供的一个弹簧属性,用来控制弹簧的弹力。...好了,不是太坏。你可以发现当你使用iOS 7提供的弹簧动画方法时,它直接提供了一些值来获取你想要的感觉。...而在实际的弹簧动作方程中,动作的时间(它到达平衡点或者最终位置的时间)是由弹簧的其他属性决定的,它不是你去设置然后强制弹簧遵循的。
CALayer有一个conrnerRadius的属性控制图层的圆角曲率,默认值为0。这个曲率值默认只影响背景颜色而不影响背景图片或者子图层。可以用过下面的示例看一下。...通过上面的示例可以发现: 只设置cornerRadius时,默认情况下,只影响背景颜色,而不影响背景图片或者子图层。 如果想要截取这个视图的图片和子视图,需要设置masksToBounds为YES。...阴影裁剪 和图层边框不同,图层的阴影继承自内容的外形,而不是根据边界来界定。...注意看左边视图的阴影范围,很好的说明了图层的阴影继承自内容的外形,而不是根据边界来界定。 shadowPath属性 图层阴影并不总是方的,而是从内容的形状继承来的。...但是如果图层包含一个同样显示50%透明的子图层时,你所看到的视图,50%来自子视图,25%来了图层本身的颜色,另外的25%则来自背景色。 如果想保持透明度一直。
layer.png CALayer就是QeartzCore框架中的一个类,CALayer是个与UIView很类似的概念,同样有backgroundColor、frame等相似的属性,我们可以将UIView...layer.png CALayer 最常用的两个子类: CAGradientLayer(用于颜色渐变的实现) // 创建 UIView 用来承载渐变色 UIView *myView = [[UIView...CAShapeLayer有不同于CALayer的属性,它从CALayer继承而来的属性在绘制时是不起作用的。...,则保持动画执行后的状态。...而实际上,keyPath的值(layer的属性)在动画运行这一过程中,是没有任何变化的,它只是调用了GPU去完成这些显示效果而已.
的类中实现如下方法,关键是rightViewMode的设置,默认是不显示的。...WWSideslipViewController是一个VC,在WWSideslipViewController的View上依次放上如下子视图: - 星空背景ImageView; - LeftVC的View...UIImageView全屏展示并关闭 ?...点击.gif actionTap 是cell中的图片上加的手势事件。...,如果把cell中的UIImageView换成UIbutton就很简单了,很容易找到那个image,可是那样的话需要点击进去才能触发事件,而不是轻击。
---- 在UIView中有一个maskView属性,我们可以利用这个属性很方便的做出一些有意思的效果 这个属性在iOS8之后开始使用,用来表示视图的遮罩。 ?...就是不起作用,请设置一下 maskView的背景颜色。...效果.png 这个效果的实现关键点在于 动画执行时间的延迟设置,这个时间的计算和设置,直接决定效果能否缓缓出来,因为代码的执行速度是很快的,而动画又是移步执行的,如果设置动画的执行时间为0,你会看到图片瞬间改变...如果兼容低版本,用maskLayer替换。...,layer的mask是种位掩蔽,在shapeLayer的填充区域中,alpha值不为零的部分,self会被绘制;alpha值为零的部分,self不会被绘制 可以把任何UIView切成任意形状的代码:
在iOS当中,所有的视图都是从一个叫做UIView的基类派生而来,UIView可以处理触摸事件,支持基于CoreGraphics的绘图,可以做仿射变换(例如旋转或缩放),或者简单的滑动以及渐变动画。...CALayer类在概念上和UIView类似,同样也是一些被层级关系树管理的矩阵块,同样也可以包含一些内容(像图片、文本、背景色),管理子图层的位置。...但是在实践中,如果你给contents赋的不是CGImage,那么你得到的图层将是空白的。 contents的这个奇异表现是由MacOS的历史原因造成的。...上面我们通过CALayer在一个普通的UIView中展示了一张图片。...通常而言,我们展示一张图片需要使用UIImageView,但是我们却可以利用CALayer在UIView上展示一张图片,是不是很有趣?
iPhone SDK提供了默认的几个TableView样式,但是如果想提供更个性化的样式就需要自己定义。 比如添加背景 如上图的样子。...其实自定义table view的样子很简单,无非就是把table view和table view cell的背景变成透明的,然后在指定视图和cell的背景图片(当然,也可以指定table view的背景图片...UITableViewDelegate, UITableViewDataSource> { UITableView *theTableView; } 先建立Controller,注意是继承自UIViewController而不是...UIScrollViewIndicatorStyleWhite]; [self.view addSubview:theTableView]; } return self; } 代码中的注释已经很清楚了...先设置视图的背景,再设定table view的背景 再看另外一断代码,设置了cell的背景,注意,这里面使用了自定义的cell类CustomCell - (UITableViewCell *)tableView
在 Arguments 栏 设置需要传入的参数 : 1> 如果在方法中需要使用按钮参数 , 则选择 Sender , 2> 如果需要 按钮 和 事件 参数 , 选择 Sender and...根 View 组件 , 然后将 生成的 UIView 控件添加到 该 根 View 控件中 ; //4....]; 5.设置背景图片 : ① 添加图片资源 : 选中 Assets.xcassets , 从 Finder 中拖动图片资源 到 其中 ; ② 设置背景图片 : 调用 setBackgroundImage...居中显示 , 之后将生成的 UIView 控件放在该 容器 中 ; 3.添加按钮 : 添加两个按钮 , 两个按钮的功能分别是 生成 UIView 控件 和 清空 UIView 控件 ; -...方法 , 设置一个 字符串格式 , 使用 通配符 进行 数据替换 ; 注意 NSArray 的 count 的通配符是 %lu ; // ② 设置提示 UILabel 文字 , 拼接字符串 ,
领取专属 10元无门槛券
手把手带您无忧上云