首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

平滑旋转并用阴影改变UIView的大小

问题:如何平滑旋转并用阴影改变 UIView 的大小?

答案

要实现平滑旋转并用阴影改变 UIView 的大小,您可以使用以下技术:

  1. Core Animation(核心动画):使用 CABasicAnimation 创建基本动画,对 UIView 的缩放、旋转和透明度进行操作。
代码语言:swift
复制
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let container = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
        container.backgroundColor = .blue

        let animation = CABasicAnimation(keyPath: "transform.rotation")
        animation.fromValue = 0.0
        animation.toValue = CGFloat.pi/4
        animation.duration = 1.0
        animation.repeatCount = 1
        animation.autoreverses = true
        animation.timingFunction = CAMediaTimingFunction(name: .easeInOutQuart)

        container.layer.add(animation, forKey: "rotationAnimation")

        let gradientLayer = CAGradientLayer(frame: container.bounds)
        gradientLayer.frame = container.bounds
        gradientLayer.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 1, y: 1)
        container.layer.addSublayer(gradientLayer)

        UIView.animate(withDuration: 2, delay: 0, options: .curveEaseInOut, animations: {
            self.container.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
            self.container.layer.cornerRadius = 10
        }, completion: nil)
    }
}
  1. CAGradientLayer(CAGradient图层):使用 CAGradientLayer 添加渐变效果。
代码语言:swift
复制
let gradientLayer = CAGradientLayer(frame: container.bounds)
gradientLayer.frame = container.bounds
gradientLayer.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
container.layer.addSublayer(gradientLayer)
  1. UIView动画:使用 UIViewanimate 方法实现动画效果。
代码语言:swift
复制
UIView.animate(withDuration: 2, delay: 0, options: .curveEaseInOut, animations: {
    self.container.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
    self.container.layer.cornerRadius = 10
}, completion: nil)

以上三种方法都可以实现平滑旋转并阴影改变 UIView 的大小。可以根据您的需求选择最适合的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS动画系列之一:带时分秒指针时钟动画(上)1. 最终实现效果以及思维导图2. CALayer3. 隐式动画

在iOS中,看得见摸得着东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView 其实UIView之所以能显示在屏幕上,完全是因为它内部一个图层 在创建...UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIViewlayer属性可以访问这个层 @property(nonatomic,readonly,retain)...@property BOOL |masksToBounds;|超过部分进行裁剪 设置阴影时候,阴影颜色+阴影偏移(或者阴影路径)+阴影透明度缺一不可。...阴影模糊度如果不设置,默认值就是3.0000。 阴影路径: 设置了阴影路径,就不再需要设置阴影偏移量了。 设置了阴影路径之后,也不能再设置masksToBounds。...CALayer 创建CALayer 在设置frame时候,内部同时设置了position,bounds.size 都会发生改变

2K30

【iOS开发-图层】图层获取与一些属性

; 使用UIView图层为例 UIView本身仅仅有一个图层,主图层 self.testView.layer.borderWidth = 10;//设置边框大小 self.testView.layer.borderColor...后面是阴影偏差(阴影会向哪个方向偏)右下角全正数 self.testView.layer.shadowColor = [UIColor blackColor].CGColor;//给阴影设置颜色...阴影不显示也是这个原因 UIImageView为例圆角实现 UIImageView控件不止一个图层。图片显示不是在主层中,所以更改主层边角为原型。...并不能改变图片显示层边角 self.imageView.layer.borderWidth = 10;//设置边框宽度大小 self.imageView.layer.borderColor = [...关于layer层旋转,平移,缩放 layer仅仅能使用3D旋转,平移,缩放 self.imageView.layer.transform = CATransform3DMakeRotation(M_PI

54430

iOS学习——核心动画之Layer基础

我们可以通过操作CALayer对象,可以很方便地调整UIView一些外观属性,可以给UIView设置阴影,圆角,边框等等... 2、如何操作layer改变UIView外观?   ...2.1 设置阴影 //默认图层是有阴影, 只不过,是透明 _RedView.layer.shadowOpacity = 1; //设置阴影圆角 _RedView.layer.shadowRadius...= 50; 3、如何操作layer改变UIImageView外观? ...可以做一些简单动画,例如:平移,拉伸,旋转 一些比较高端动画,都是直接操作CALayer,可以制作3D动画 使用CALayer,可以直接操作显示东西,例如阴影,圆角,边框等 所以,对比CALayer...是根据当前时间,绕着表盘中心点进行旋转.   要了解一个非常重要知识点,无论是旋转,缩放它都是绕着锚点进行

1.5K61

【IOS开发进阶系列】动画专题

•  单位 —— 对于与图片大小或是图层边界相关显示,单位坐标是一个方便度量方式, 当大小改变时候,也不需要再次调整。...改变contentsCenter值并不会影响到寄宿图显示,除非这个图层大小改变了,你才看得到效果。        ...这是因为自动调整会影响到视图frame,而根据图3.2演示,当视图旋转时候,frame是会发生改变,这将会导致一些布局上失灵。...这使得你可以手动地重新摆放或者重新调整子图层大小,但是不能像UIViewautoresizingMask和constraints属性做到自适应屏幕旋转。        ...如果想让立方体看起来更加真实,需要自己做一个阴影效果。你可以通过改变每个面的背景颜色或者直接用带光亮效果图片来调整。

46410

IOS开发系列——UIView专题之二:动画篇【整理,部分原创】

UIView可以产生动画效果变化包括: •位置变化:在屏幕上移动视图。 •大小变化:改变视图框架(frame)和边界。 •拉伸变化:改变视图内容延展区域。...•改变透明度:改变视图alpha值。 •改变状态:隐藏或显示状态。 •改变视图层次顺序:视图哪个前哪个后。 •旋转:即任何应用到视图上仿射变换(transform)。...UIKit直接将动画集成到UIView类中,实现简单动画创建过程。UIView类定义了几个内在支持动画属性声明,当这些属性发生改变时,视图为其变化过程提供内建动画支持。...执行动画所需要工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性代码包装到一个代码块中。...self.blueController =[[BlueViewController alloc] initWithNibName:nil bundle:nil]; //设置导航控制器view大小占整个屏幕

1.3K10

Quartz2D复习(四) --- 图层CALayer和动画CAAnimation

1、CALayer 1)、在ios中,能看得见摸得着东西基本上都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView 2)、UIView之所以能显示在屏幕上,完全是因为它内部一个图层...UIView显示。...UIView本身不具备显示功能,是它内部层才有显示功能 5)、通过CALayer对象,可以很方便调整UIView一些外观属性,比如:阴影、圆角大小、边框宽度和颜色。。。...但是实质上,   图层属性值还是动画执行前初始值,并没有真正改变 11)、CAKeyframeAnimation  --- 关键帧动画   关键帧动画,也是CAPropertyAnimation...  view : 需要进行转场动画视图   options : 转场动画类型   animations : 将改变视图属性代码放在这个block中   completion : 动画结束后,会自动调用这个

1.4K30

【IOS开发基础系列】UIView专题

当发生屏幕旋转事件时候,UIapplication对象会将旋转事件传递给uiwindow,uiwindow又会将旋转事件传递给它根控制器,由根控制器决定是否需要旋转UIapplication->uiwindow...    接收者首选尺寸 返回值     一个新大小用来适应接收者子视图 讨论     默认实现返回大小参数 子类重写这个方法用来返回特定视图大小。...举个粒子,UISwitch返回一个修正过大小,UIImageView返回图片大小 这个方法并没有改变接收者大小 sizeToFit     调整大小并移动接收者视图大小所以他包含了他子视图 -...UIView可以产生动画效果变化包括:     • 位置变化:在屏幕上移动视图。     • 大小变化:改变视图框架(frame)和边界。     • 拉伸变化:改变视图内容延展区域。     ...• 旋转:即任何应用到视图上仿射变换(transform)。         UIKit直接将动画集成到UIView类中,实现简单动画创建过程。

57230

iOS点击查看大图动画效果

今天就讲解一个查看和收起大图动画效果,先直接看效果图: 如图所示,最开始是一个小图,点击小图可以查看大图。大图会从小图位置和大小“弹”出来,同时背景变成半透明阴影。...,直到撑到屏幕边界; 收起时先让阴影背景消失; 然后将图片逐渐收小到小图原本大小。...[UIView animateWithDuration:0.3 animations:^{ // 改变大小 _bigImageView.frame = originFram...这里动画我们使用是最简单iOS 7开始支持基于blockUIView动画,在我这篇博客中也有详细讲解:iOS基础动画教程 然后,我们初始化了阴影背景视图,并添加到界面上,此时不要忘记,要再次将大图手动推送到最上层...[UIView animateWithDuration:0.3 animations:^{ // 改变大小 _bigImageView.frame = self.smallImageView.frame

1.6K20

CALayer 图层概念二、CALayer属性二、方法

UIView负责监听和相应事件.UIView是更高层封装 在 iOS 中,你能看得见,摸得着东西基本上都是UIView.比如一个按钮,一个文本标签,一个文本输入框, 一个图标等.这些都是UIView...其实,对比CALayer,UIView多了一个事件处理功能,也就是说,CALayer不能处理用户触摸事件,而UIView可以.所以,如果显示出来东西需要跟用户进行交互的话,用UIView.UIView...阴影效果shadowColor、shadowOffset、shadowOpacity属性必须同时设置后才可以看到 设置阴影颜色, 注意UIKit框架中颜色不能直接设置给CGColorRef,...,但是这样会导致阴影效果没有,可以再添加一个SubLayer,添加阴影。...以哪个轴哪个点进行旋转,以一个轴旋转,轴上任何点都一样,参数填1就可以 CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat

1.4K70

Core Animation实战四(视觉效果)

这里有一些UIView没有暴露出来CALayer功能: 阴影,圆角,带颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 这篇主要说阴影圆角边框,先看一下Demo效果: ?...它是一个CGSize值,宽度控制这阴影横向位移,高度控制着纵向位移。...self.shadowView.layer.shadowOffset = CGSizeMake(1, 1); //shadowRadius属性控制着阴影模糊度,当它值是0时候,阴影就和视图一样有一个非常确定边界线...双线性滤波算法通过对多个像素取样最终生成新值,得到一个平滑表现不错拉伸。但是当放大倍数比较大时候图片就模糊不清了。...但是,较双线性滤波算法而言,三线性滤波算法存储了多个大小情况下图片(也叫多重贴图),并三维取样,同时结合大图和小图存储进而得到最后结果 kCAFilterNearest是一种比较武断方法。

53220

iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo

前言 iOS开发中常用动画(定点缩放弹窗)应用场景: 会员详情右侧下拉操作菜单 浏览器右侧下拉菜单 I 基础知识 (CALayer) 每一个UIView内部都默认关联着一个CALayer,...1.1 anchorPoint anchorPoint就相当于白纸上图钉,它主要作用就是用来作为变换支点,旋转就是一种变换,类似的还有平移、缩放。...* bounds.size.height 修改anchorPoint而不想移动layer,在修改anchorPoint后再重新设置一遍frame就可以达到目的,这时position就会自动进行相应改变...2.1 核心代码 /** 1、点击弹出按钮时,阴影alpha由0到1,弹窗scale由0到1(这里使用CABasicAnimation) 2、 点击空白处,再让阴影alpha由1到0,弹窗scale...由1到0(同样使用CABasicAnimation),动画完成后移除阴影和弹窗 */ - (void)expandView{ //展示时候,动画从右上角往左下脚延伸;隐藏时候,动画从左下脚往右上角收回

1.8K21

iOS基础动画教程

现在分别讲解位置、透明度、大小、颜色、旋转动画。 位置动画 我们在界面上放置一个方块,然后想要他通过动画移动到另一个位置,怎么做呢?...很简单,在上面的代码块位置改变方块中心就好了,如下: [UIView animateWithDuration:1 animations:^{ // 改变蓝色方块位置...大小动画 如果想改变一个控件大小,需要在代码块里用到一个改变大小函数:CGAffineTransformMakeScale,这个函数参数分别为设置长和宽为原来多少倍,比如我们通过动画将控件放大到原来两倍...如果只是想旋转一下停住,按照这种方式写,改变角度就可以了,但是如果想要旋转一个整圆,第一个想到可能是把角度改成整圆: [UIView animateWithDuration:1 animations...就跟改变位置,位置还是原来位置时,也不会动一样。那怎么办呢。另外,这里旋转都是一次性,如果想要一直转,怎么做呢,是不是很容易想到循环?

71730

iOS利用锚点实现定点缩放弹窗

内部都默认关联着一个CALayer, UIView有frame、bounds和center三个属性,CALayer也有类似的属性,分别为frame、bounds、position、anchorPoint...1.1 anchorPoint anchorPoint就相当于白纸上图钉,它主要作用就是用来作为变换支点,旋转就是一种变换,类似的还有平移、缩放。...* bounds.size.height 修改anchorPoint而不想移动layer,在修改anchorPoint后再重新设置一遍frame就可以达到目的,这时position就会自动进行相应改变...在这里插入图片描述 2.1 核心代码 /** 1、点击弹出按钮时,阴影alpha由0到1,弹窗scale由0到1(这里使用CABasicAnimation) 2、 点击空白处,再让阴影alpha由1...到0,弹窗scale由1到0(同样使用CABasicAnimation),动画完成后移除阴影和弹窗 */ - (void)expandView{ //展示时候,动画从右上角往左下脚延伸;隐藏时候

1.6K31

iOS动画-CALayer基础知识

苹果为我们提供了简洁方便UIView接口,而且为UIView增加了处理触摸事件能力,但这种简单设计也不可避免带来灵活上缺陷,如果我们需要在底层做一些改变,或者使用一些没有在UIView上实现接口功能...下面是一些UIView没有暴露出来CALayer功能: 设置阴影、圆角、带颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 二、CALyer寄宿图与contents属性 CALayer具有和...NSString) contentMode (枚举) 内容填充方式(填满、自适应等) contentsScale(CGFloat) contentScaleFactor(CGFloat) 像素尺寸和视图大小比例...frame&&bounds.png 上图对原有视图做了旋转变换,之后frame实际上代表了覆盖在图层旋转之后整个轴对齐矩形区域,此时frame宽和高和bounds不再一致了。...;但这时候我们又不得不考虑一个问题:修改锚点可以让我们动画围绕非中心点旋转,但是这也改变了原有视图位置frame,这是我们不想要结果,该如何解决呢?

1.9K50

iOS-圆角、边框、阴影

3)shadowOffset 阴影方向和距离,默认是(0, -3),即阴影相对于Y轴有3个点向上位移 4)shadowRadius 阴影模糊度,当它值是0时候,阴影就和视图一样有一个非常确定边界线...阴影是通过里面的飞机来计算 所以,我们圆角加阴影实现方案就出来了,我们可以用两个视图来实现,一个只画阴影外图层,和一个经过裁剪内图层,这样外图层阴影会根据裁剪过后内图层来计算,这样看起来就即有阴影又有圆角了...self.cCorner是通过conrnerCorner赋值,self.cRadius是通过conrnerRadius赋值,所以,在切圆角时,我们需要知道view大小,如果我们用了约束或者切圆角时没有设置...view大小,这样就会吧整个view都切没了,所以在这两种情况,我们需要传一个bounds值进来,如果在切角时已经设置了view大小,conrnerBounds就不用传了 下面再来一个具体用法:...// 圆角+边框+阴影 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; view.backgroundColor

2.7K50
领券