• 30个Swift UI控件

    2019-03-02 11:57:35
    30个让你眼前一亮的Swift UI控件 No.1 TwicketSegmentedControl 多页面切换滑块控件,能处理滑块的惯性,可以直接将滑块甩到到另一侧。 No.2 PagingMenuController 提供多种样式的分页切换控件 No.3 preview-...

    30个让你眼前一亮的Swift UI控件

    No.1 TwicketSegmentedControl

    多页面切换滑块控件,能处理滑块的惯性,可以直接将滑块甩到到另一侧。
    在这里插入图片描述

    No.2 PagingMenuController

    提供多种样式的分页切换控件
    在这里插入图片描述

    在这里插入图片描述

    No.3 preview-transition

    预览图片控件,带有丰富的过度动画
    在这里插入图片描述

    No.4 SCLAlertView

    一款漂亮的弹窗控件
    在这里插入图片描述

    No.5 SwiftMessages

    提供多种丰富的消息弹窗样式的控件
    在这里插入图片描述

    No.6 XLActionController

    有多种可自定义可扩展的底部菜单栏控件
    在这里插入图片描述

    No.7 Popover

    一款简洁的弹出式弹窗控件
    在这里插入图片描述

    No.8 Presentr

    自动义ViewController样式控件
    在这里插入图片描述
    在这里插入图片描述

    No.9 FoldingCell

    卡片式UI控件,带有惊艳的卡片折叠/展开效果
    在这里插入图片描述

    No.10 expanding-collection

    MaterialDesign 风格的扩展式卡片设计
    在这里插入图片描述

    No.11 DGElasticPullToRefresh

    弹性的下拉刷新控件
    在这里插入图片描述

    No.12 Persei

    适用于 UITableView / UICollectionView / UIScrollView 的动态顶部菜单栏控件
    在这里插入图片描述

    No.13 PullToMakeSoup

    下拉刷新顺便煮个汤吧
    在这里插入图片描述

    No.14 Instructions

    一款能快速创建引导流程的控件
    在这里插入图片描述

    No.15 FaceAware

    FaceAware 能使UIImageView能够聚焦图像中的面部
    在这里插入图片描述

    No.16 JTAppleCalendar

    100%可自定义的日历控件
    在这里插入图片描述

    No.17 DateTimePicker

    一款精致的日期选择控件
    在这里插入图片描述

    No.18 NMessenger

    基于AsyncDisplaykit构建的快速、轻量级信息聊天UI组件
    在这里插入图片描述

    No.19 reel-search

    允许从列表中选择选项的搜索控件
    在这里插入图片描述

    No.20 CollectionViewSlantedLayout

    CollectionViewSlantedLayout 是 UICollectionViewLayout 的子类,允许在 UICollectionView 中显示倾斜的单元格。
    在这里插入图片描述

    No.21 Bartinter

    Bartinter 能神奇的根据其背后的内容动态更改状态栏样式
    在这里插入图片描述

    No.22 LoginCritter

    一款有趣的响应输入文本字段交互的控件
    在这里插入图片描述

    No.23 alerts-and-pickers

    使用TextField,TextView,DatePicker,PickerView,TableView,CollectionView和MapView的原生 UIAlertController的高级用法。
    在这里插入图片描述

    No.24 CardParts

    基于卡片的响应式UI框架
    在这里插入图片描述

    No.25 cardslider

    允许通过滑动卡片来切换页面的控件
    在这里插入图片描述

    No.26 FloatingPanel

    简洁易用的浮动面板UI组件
    在这里插入图片描述

    No.27 SPPermission

    使用可自定义的视觉效果来管理权限
    在这里插入图片描述

    No.28 UberSignature

    允许用户用他们的手指以逼真的风格绘制他们的签名
    在这里插入图片描述

    No.29 circle-menu

    简洁优雅的UI菜单,圆形布局和MaterialDesign动画
    在这里插入图片描述

    No.30 paper-switch

    MaterialDesign UI模块,在开关打开时带水波纹扩散效果。
    在这里插入图片描述

    作者:JasonWuuu
    链接:https://juejin.im/post/5c712bc8e51d45346b313dc2

    展开全文
  • swift UI 学习 (一)

    2019-07-10 18:42:13
    swift UI 学习 Swift UI 简介SwiftUI 的特点是什么1. 声明式语法2. 拥有更直观的新设计工具3. 为所有的苹果设备提供原生体验SwiftUI 代码实例 Swift UI 简介 苹果开发者大会 WWDC 2019 在北京时间今天凌晨开幕。在这...

    Swift UI 简介

    苹果开发者大会 WWDC 2019 在北京时间今天凌晨开幕。在这场大会上除了「史上最难看 Mac 主机」、首次出现的iPadOS以外,我们还终于可以对饱受诟病的iTunes说再见了。而对于开发者来说,新发布的 SwiftUI 可能是最吸引人的特性,在 苹果公司软件工程高级副总裁Craig Federighi的演示中,我们可以轻松地把一百行的前端代码缩减到十几行。

    学习网址:

    官方swiftUI 学习

    苹果官方swift 源码教程

    GitHub Package 论坛

    SwiftUI 的特点是什么

    SwiftUI 使用声明式语法,所以我们可以简单地声明用户界面的样式。

    • 开发者可以声明需要由一串文本输入框构成的组件
    • 然后定义每一个输入框的字体对齐方式、字体样式、字体颜色。
    • 这些代码比以往更加易懂,省时并易于维护。

    这种声明式的方式甚至允许使用复杂的功能,如动画(animation)。只需要几行代码,即可添加动画在任何控件上,并且可以使用易于调用的特效。在运行时,SwifthUI 会自行控制创建流畅动作的所有步骤,并且可以解决程序冲突,保证 app 稳定运行。动画特效变得如此容易,我们可以发掘使 app 更加灵动的方式。

    1. 声明式语法

    SwiftUI 使用了声明式语法,所以开发者能够十分轻易地描述用户界面应该做什么。例如,编写需要包含文本字段的项目列表时,开发者可以用代码描述每个字段的对齐方式、字体和颜色。代码也比以前更简单,更易于阅读。

    在这里插入图片描述

    这种声明式风格非常适用于像动画这样复杂的元素。通过 SwiftUI,开发者可轻松地将动画添加到几乎任何控件。

    2. 拥有更直观的新设计工具

    Xcode 11 包含更直观的新设计工具,可让开发者通过拖拽的方式使用 SwiftUI 构建界面,在这过程中可以直接设置控件的相关属性。

    当在设计工具中工作时,所编辑的内容会立刻反映到代码上,如果从模拟器切换到手机,手机也能立马看到预览效果。

    在这里插入图片描述

    3. 为所有的苹果设备提供原生体验

    SwiftUI 是真正的原生 UI 框架,建立在苹果数十年打磨用户界面的经验上。开发者通过少量代码和交互式设计就能使用这个框架。

    在这里插入图片描述

    SwiftUI 代码实例

    1. 为视图的任何状态声明内容和布局。SwiftUI知道该状态何时发生变化,并更新视图的呈现以匹配该状态。

    代码:

    List(landmarks) { landmark in
       HStack {
          Image(landmark.thumbnail)
          Text(landmark.name)
          Spacer()
          
          if landmark.isFavorite {
             Image(systemName: "star.fill")
                .foregroundColor(.yellow)
          }
       }
    }
    

    运行效果:

    在这里插入图片描述

    1. 将小的、单一职责的视图组合成更大、更复杂的接口。在为任何苹果平台设计的应用程序之间共享自定义视图。
      代码:
    struct FeatureCard: View {
       var landmark: Landmark
       
       var body: some View {
          landmark.featureImage
             .resizable()
             .aspectRatio(3/2, contentMode: .fit)
             .overlay(TextOverlay(landmark))
       }
    }
    

    效果:
    在这里插入图片描述

    1. 创建平滑的动画就像添加一个方法调用一样简单。SwiftUI在需要时自动计算和动画转换。

    代码:

    VStack {
       Badge()
          .frame(width: 300, height: 300)
          .animation(.basic())
       Text(name)
          .font(.title)
          .animation(Animation.basic().delay(0.25))
    }
    
    
    

    效果:

    在这里插入图片描述

    展开全文
  • 看完本文后,您将能够作出下面的动画 SwiftUI Animation SwiftUI Animation 看完本文您将掌握的技能 动画制作的核心流程 制作位移效果 图片的显示与设置 背景的设置 自定义Button 欣赏远古壁画 技术...
        

    欢迎订阅专栏《SwiftUI 2020教程》

    本文价值与收获

    看完本文后,您将能够作出下面的动画

    41085-b13c3eb816f5482c.jpg
    SwiftUI Animation
    41085-58a4ddf8753133ed.gif
    SwiftUI Animation

    看完本文您将掌握的技能

    • 动画制作的核心流程
    • 制作位移效果
    • 图片的显示与设置
    • 背景的设置
    • 自定义Button
    • 欣赏远古壁画

    技术交流

    我的QQ:QQ:3365059189
    SwiftUI技术交流QQ群:518696470


    让我们进入神奇的SwiftUI Animaiton世界吧

    在学习之前,我们先回答两个问题。

    为什么要学Animation动画?

    为什么要学习动画,因为SwiftUI核心就是手势与动画。如果您不学习动画,基本上就不算掌握SwiftUI。

    听说动画很难学,一篇文章真的能让我掌握么?

    完全可能,编程其实就是学习套路,本文将告诉您动画制作的两个核心套路。掌握了这个核心套路,剩下的工作就是了解API和组织动画效果了。

    什么是Animation

    “animate”一词来自拉丁语,意思是“其中有生命的东西”。此外,它意味着“生命或灵魂”。因此,当您对某物进行动画处理时,便赋予了它生动活泼的外观。
    每个动画都需要进行某种更改才能看到发生的事情。在SwiftUI中,我们需要先定义要更改的内容,然后对该更改进行动画处理

    大多数动画包含三个流程:

    • 1.开始-这是视图的开始状态。
    • 2.更改-这是动画发生的地方。
    • 3.停止-这是视图的最终状态。

    在SwiftUI中,您只需要定义开始和结束状态。这两种状态之间的更改将由SwiftUI自动处理。您可以通过多种方式来控制更改,例如速度和持续时间。

    Triggers 是什么

    动画需要某种触发来启动动画。当我说“触发”时,是指会提示或启动动画的事情。触发器可以是点击按钮,更改值或事件(例如屏幕出现与因此)。


    SwiftUI Anination的两个核心流程

    学习编程其实和学习做菜一样。为什么家庭主妇一生都无法达到厨师的水平,很多简单厨师掌握的做菜套路,而主妇不过了日复一日的重复劳动。本文将告诉您动画制作的两个核心套路。掌握了这个核心套路,您就从告别主妇模式了。

    展开全文
  • 笔者接触 iOS 开发有一段时间了,尤其特别喜欢UI部分,特意收集整理了30个让你惊艳的第三方开源控件(swift),无论是应用到项目中还是用来学习都能让你大呼过瘾,废话不多说,直接上图上链接!   No.1 ...

    前言

    笔者接触 iOS 开发有一段时间了,尤其特别喜欢UI部分,特意收集整理了30个让你惊艳的第三方开源控件(swift),无论是应用到项目中还是用来学习都能让你大呼过瘾,废话不多说,直接上图上链接!
     

    No.1 TwicketSegmentedControl

    多页面切换滑块控件,能处理滑块的惯性,可以直接将滑块甩到到另一侧。

    TwicketSegmentedControl.gif 

    No.2 PagingMenuController

    提供多种样式的分页切换控件

    PagingMenuController
    PagingMenuController
     

    No.3 preview-transition

    预览图片控件,带有丰富的过度动画

    preview-transition
     

    No.4 SCLAlertView

    一款漂亮的弹窗控件

    SCLAlertView
     

    No.5 SwiftMessages

    提供多种丰富的消息弹窗样式的控件

    SwiftMessages
     

    No.6 XLActionController

    有多种可自定义可扩展的底部菜单栏控件

    XLActionController
     

    No.7 Popover

    一款简洁的弹出式弹窗控件

    Popover
     

    No.8 Presentr

    自动义ViewController样式控件

    Presentr
    Presentr
     

    No.9 FoldingCell

    卡片式UI控件,带有惊艳的卡片折叠/展开效果

    FoldingCell
     

    No.10 expanding-collection

    MaterialDesign 风格的扩展式卡片设计

    expanding-collection
     

    No.11 DGElasticPullToRefresh

    弹性的下拉刷新控件

    DGElasticPullToRefresh
     

    No.12 Persei

    适用于 UITableView / UICollectionView / UIScrollView 的动态顶部菜单栏控件

    Persei
     

    No.13 PullToMakeSoup

    下拉刷新顺便煮个汤吧

    PullToMakeSoup
     

    No.14 Instructions

    一款能快速创建引导流程的控件

    Instructions
     

    No.15 FaceAware

    FaceAware 能使UIImageView能够聚焦图像中的面部

    FaceAware
     

    No.16 JTAppleCalendar

    100%可自定义的日历控件

    JTAppleCalendar
     

    No.17 DateTimePicker

    一款精致的日期选择控件

    DateTimePicker
     

    No.18 NMessenger

    基于AsyncDisplaykit构建的快速、轻量级信息聊天UI组件

    NMessenger 

    No.19 reel-search

    允许从列表中选择选项的搜索控件

    reel-search
     

    No.20 CollectionViewSlantedLayout

    CollectionViewSlantedLayout 是 UICollectionViewLayout 的子类,允许在 UICollectionView 中显示倾斜的单元格。

    CollectionViewSlantedLayout
     

    No.21 Bartinter

    Bartinter 能神奇的根据其背后的内容动态更改状态栏样式

    Bartinter
     

    No.22 LoginCritter

    一款有趣的响应输入文本字段交互的控件

    LoginCritter
     

    No.23 alerts-and-pickers

    使用TextField,TextView,DatePicker,PickerView,TableView,CollectionView和MapView的原生
    UIAlertController的高级用法。

    alerts-and-pickers
     

    No.24 CardParts

    基于卡片的响应式UI框架

    CardParts
     

    No.25 cardslider

    允许通过滑动卡片来切换页面的控件

    cardslider
     

    No.26 FloatingPanel

    简洁易用的浮动面板UI组件

    FloatingPanel
     

    No.27 SPPermission

    使用可自定义的视觉效果来管理权限

    SPPermission
     

    No.28 UberSignature

    允许用户用他们的手指以逼真的风格绘制他们的签名

    UberSignature
     

    No.29 circle-menu

    简洁优雅的UI菜单,圆形布局和MaterialDesign动画

    circle-menu
     

    No.30 paper-switch

    MaterialDesign UI模块,在开关打开时带水波纹扩散效果。

    paper-switch
     
    本次的分享就到这啦,如果喜欢的话可以点个关注或收藏。如果有其他好用的控件也欢迎在评论里留言分享。

    本文为个人原创,转载请注明出处。

    展开全文
  • Swift UI控件详细介绍

    2018-06-27 09:19:10
    Swift UI控件详细介绍(上)UI控件首先介绍一下AppDelegate.swift@UIApplicationMain 调用了OC中的UIApplicationMain函数;UIApplicationMain是iOS应用程序的入口UIApplicationMain:a.创建了一个UIApplication对象,...

    Swift UI控件详细介绍(上)

    UI控件

    首先介绍一下AppDelegate.swift
    @UIApplicationMain 调用了OC中的UIApplicationMain函数;
    UIApplicationMain是iOS应用程序的入口
    UIApplicationMain:
    a.创建了一个UIApplication对象,代表当前应用程序. 作用是用来检测当前应用程序状态的改变。

    • 1.在这个方法中来搭建应用程序中的所有的界面
    • 2.获取应用程序需要展示的数据
    • 3.使用界面展示数据

      注意:如果不在这个方法中去创建window,那么程序会通过Main.storyboard去创建应用程序的界面

    b.创建一个遵守UIApplicationDelegate的协议的类的对象作为UIApplication的代理,作用是处理应用程序状态的改变(创建AppDelegate对象并且设置为UIApplication对象的代理)

    这个里面一个有六个方法分别是
    1.当应用程序已经启动成功后,会自动调用这个方法 application
    2.当应用程序将要成为非活跃状态的时候会自动调用这个方法。applicationWillResignActive

    活跃状态:程序在屏幕上可见
    非活跃状态:程序没有显示在屏幕上(按home键进入后台、来电打断、在当前应用程序打开其他的应用程序

    3.应用程序已经进入后台的时候会自动调用( 进入后台:按home键)applicationDidEnterBackground

    按下home键:command + shift + h
    在这个方法中一般去暂停视频/音频播放;游戏需要暂停游戏;保存数据

    4.应用程序将要进入前台的时候会自动调用( 进入前台)applicationWillEnterForeground

    按两下home键:command + shift + h + h(模拟器)

    5.应用程序已经变成活跃状态的时候会自动调用 applicationDidBecomeActive

    a.程序启动成功后
    b.程序从后台重新进入前台
    c.来电打断结束

    6.应用程序将要终止的时候会调用applicationWillTerminate

    UIview

    UIview:是ios中所有视图(控件)直接/间接的父类;所以uiview的属性和方法,对于其他类型的视图都有效
    视图:在屏幕上能看见的所有东西属于视图

    1.创建UIView的对象

            let redView = UIView.init()

    2.设置frame属性(由坐标(x,y)和大小(width,height)两部分组成

            redView.frame = CGRectMake(10, 10, 100, 100)
       a必须设置坐标和大小(默认坐标(0.0),大小(0,0))
               b将视图添加到已经展示在屏幕上的视图上
      ios中所以的结构都有一个对应的Make方法用来快速的创建一个结构体变量

    3.把视图添加到界面上

            self.view.addSubview(redView)

    4.设置背景颜色

    视图的背景颜色默认是透明
    CGFloat就是UI中的浮点型
    颜色创建方式:a通过类型方法创建指定颜色

            redView.backgroundColor = UIColor.greenColor()

    b通过三原色创建颜色(red,green,blue:红绿蓝的值(0-1) alpna:透明的值(0-1)

      redView.backgroundColor = UIColor.init(red: 30/255.0, green: 133/255.0, blue: 26/255.0, alpha: 1)

    总结:计算视图坐标的时候,注意相对性,当前视图被添加到那个视图上那么当前视图的坐标就是相对于谁来算的

    相关属性

            let readView = UIView.init()
    
            self.view.addSubview(readView)

    设置背景颜色

            readView.backgroundColor = UIColor.redColor()

    1.frame(坐标和大小)

            readView.frame = CGRectMake(100, 100, 100, 100)

    2.center(中心点)
    a通过frame和确定视图的中心点坐标

            print(readView.center)

    b可以通过center的值,取改变视图的坐标

            readView.center = CGPointMake(200, 200)
            print(readView.frame)

    3.bounds(坐标和大小)
    默认情况下bounds的坐标是(0.0),大小和视图的frame大小一样

    了解:
    rg改变bouns的大小,frame的大小和坐标都改变,center不变
    如果改变bounds的坐标,不影响当前视图的位置。但是影响添加当前视图上的子视图不建议修该bounds

    形变

    transform(变形):当前视图发生形变,那么添加到当前视图上所有的视图会跟着一起形变
    a缩放改变 参数1:x方向上的缩放比例,参数2y方向上的缩放比例

            readView.transform = CGAffineTransformMakeScale(0.5, 0.5)

    b.旋转(参数旋转角度(圆周率对应的角度值)(0-360 或 0 到 2*M_PI))

            readView.transform = CGAffineTransformMakeRotation(CGFloat( M_PI_4))

    c:多个变形同时发生 在另外一个形变的前提下旋转 参数1:另外一个形变 参数2:旋转角度

            readView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4/2))

    在另外一个形变的前提下平移

            readView.transform = CGAffineTransformTranslate(readView.transform, 0, 300)

    在另一个形变的前提下缩放

            readView .transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(100, 0), 0.5, 2)

    组合两个形变

            readView.transform = CGAffineTransformConcat(readView.transform, CGAffineTransformMakeTranslation(0.5, 300))

    父子视图

    MARK:-父子视图的特点和方法
    创建黄色视图

     let yellView=UIView.init(frame: CGRectMake(0, 0, 50, 50))
             yellView.backgroundColor=UIColor.yellowColor()

    设置tag值,默认都是0,设置tag值的时候值必须大于0
    tag的作用是区分界面不同的视图

            redVIew.tag=10

    1.一个视图只有一个父视图,可以有多个子视图
    连续将同一个视图添加到两个视图。最会添加有效

            redVIew.addSubview(yellView)
             self.view.addSubview(yellView)
            yellView.tag=11

    2获取一个视图的父视图

            let auperView = redVIew.superview
            auperView?.backgroundColor = UIColor.greenColor()

    3.获取一个视图的所以子视图

             let sub = self.view.subviews

    4.通过tga值拿到指定的值的子视图

            let sub1 = self.view.viewWithTag(11)
            sub1?.frame.origin.y+=200

    层次关系

    在一个视图上,添加多个子视图的时候,子视图之间如果有公共的部分,那么后添加的子视图会覆盖先添加的
    一般情况下,如果想要将一个视图显示在最下面,就最后添加,要想显示在最上面的就最后添加
    创建视图

           let view1 = self.creatView(CGRectMake(50, 100,100,100), backColor: UIColor.yellowColor())
    
           let view2 =  self.creatView(CGRectMake(100, 150,100,100), backColor: UIColor.redColor())
           let view3 =  self.creatView(CGRectMake(150, 200,100,100), backColor: UIColor.greenColor())
            let view4 =  self.creatView(CGRectMake(180, 150,100,100), backColor: UIColor.blueColor())

    将指定的视图放到最上层

            self.view.bringSubviewToFront(view1)

    将指定视图放到最下层

            self.view.sendSubviewToBack(view3)

    将指定的视图插入到另一个视图上面

            self.view.insertSubview(view3, aboveSubview: view2)

    将指定的视图插入到另一个视图的下面

            self.view.insertSubview(view2, belowSubview: view1)

    动画

    动画 UIView的动画是用来改变动画的视图frame相关属性,背景颜色透明度 形变等
    下面介绍4种
    创建视图

            subView.frame = CGRectMake(0, 0, 100, 100)
            subView.center = self.view.center
            subView.backgroundColor = UIColor.blueColor()
            self.view.addSubview(subView)
            layearAction()
            UIViewAnimation1()

    参数1:动画时间 参数2:延迟时间 参数3:整个动画完成之后自动调用这个方法

        func UIViewAnimation1(){
    
        UIView.animateWithDuration(2, animations: {
            self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
            }) { (_) -> Void in
    //         动画结束需要执行的代码
                UIView.animateWithDuration(3, animations: {
                    self.subView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
                     self.subView.transform=CGAffineTransformMakeTranslation(0, 0)
                })
    
            }
    
        }
     参数1:动画时间  参数2:延迟时间 参数3:选项 (.Repeat动画重复执行,.Autoreverse自动回到动画开始的状态) 参数4:动画结束时视图状态的闭包  参数5:整个动画过程完成后需要执行的闭包
        func UIViewAnimation2(){
    
    
            UIView.animateWithDuration(1, delay: 0.5, options: [ .Repeat, .Autoreverse,.CurveEaseInOut], animations: {
    //            self.subView.alpha = 0.6
                self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
                self.subView.transform = CGAffineTransformMakeRotation(CGFloat(360))
                self.subView.backgroundColor = UIColor.greenColor()
    
    
                }, completion: nil)
    
    
    
        }

    功能:执行这个方法前视图状态,动画切换到闭包里面设置的最终状态 参数1:动画时间(单位秒) 参数2:设置动画结束是的视图状态

        func UIViewAnimation3(){
    
    
            UIView.animateWithDuration(1) {
    //        在这设置视图动画结束是状态
    
                self.subView.frame.origin.y=50
                self.subView.frame.size = (CGSizeMake(50, 50))
    
                self.subView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
    
                self.subView.backgroundColor = UIColor.redColor()
    //            设置透明度
                self.view.alpha = 0.3
            }
    
        }
    参数1:动画时间 参数2:延迟时间 参数3:弹簧板压力系数 参数4:弹簧初始加速度 参数5:选项  参数6:设置动画结束视图状态  参数7:动画结束后执行的闭包
        func UIViewAnimation4(){
            UIView.animateWithDuration(2, delay: 1, usingSpringWithDamping: 0.1, initialSpringVelocity: 0, options: [ .Repeat, .Autoreverse], animations: { self.subView.alpha = 0.6
                self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
                self.subView.transform = CGAffineTransformMakeRotation(CGFloat(720))
    // 注意:对于有圆角的矩形,改变大小而又不影响形状,只能通过形变取缩放,不能直接改变frame中的size
    
                self.subView.transform  = CGAffineTransformMakeScale(0, -300 )
                    self.subView.backgroundColor = UIColor.randomColor()
    
                }, completion: nil)
        }

    补充layer 属性是负责视图的形状(显示) 切圆角 当圆角值为正方形的一半,就可以切一个圆

    func layearAction(){
    self.subView.layer.cornerRadius = 20
    //设置边框
    self.subView.layer.borderWidth = 3
    self.subView.layer.borderColor = UIColor.randomColor().CGColor
        }

    UIlable

    UIlable:UiView -> UIView的属性方法UIlabel 都拥有,从UIView继承下来的属性

    //        创建UIlabel对象
            let label = UILabel.init(frame: CGRectMake(10, 10, 400, 600))
    
    //        添加到界面
            self.view.addSubview(label)
    //        设置颜色
            label.backgroundColor = UIColor.greenColor()
    
    
    //        1.UILabel特有的属性
    //        设置label上显示文字
            label.text = "《书湖阴先生壁》茅檐常扫净无苔,花木成畦手自栽。一水护田将绿绕,两山排闼送青来。"
    //        拿到lable上的文字
            print(label.text)
    //        2.设置字体(默认大小17)
    //        使用系统字体 设置字体大小
            label.font = UIFont.systemFontOfSize(26)
    //        参数1:字体大小 参数:2 字体粗细   使用系统字体
            label.font = UIFont.systemFontOfSize(36, weight: 6)
    //        使用系统粗体 设置大小
           label.font = UIFont.boldSystemFontOfSize(36)
    //       使用系统斜体 设置字体大小
           label.font = UIFont.italicSystemFontOfSize(66)
    //        3.设置文本颜色(默认黑色)
            label.textColor = UIColor.redColor()
    //        设置阴影颜色
            label.shadowColor = UIColor.blueColor()
    //        sz阴影的偏移
            label.shadowOffset.height=6
            label.shadowOffset.width=6
            label.shadowOffset = CGSizeMake(0, 1)
    //        设置文字的剧中模式(默认左对齐)
            label.textAlignment = .Center
    
    //        设置行数
            label.numberOfLines = 15
    
    //        自动换行
    //        label.numberOfLines = 0
    
    //        设置换行模式 ByWordWrapping以单词为单位换行  ByCharWrapping 以字符为单位换行
    
            label.lineBreakMode = .ByCharWrapping

    补充使用自己字体的步骤
    1.将ttf文件拖到工程中
    2.在info.plist文件中添加键值对 Fontsprovided by appli 将字体添加到系统字体库
    3.通过提供系统名的构造方法取创建字体(要先找到自己添加的字体的字体名

    label.font = UIFont.init(name: "HYZhuanShuF", size: 26)

    根据文字设置label大小

    需要显示在Lable上的文字

            let str = "ikdh"
    //        计算显示指定文字所需要的最小空间
    //        1.将swift的字符串转换成OC的字符串
            let ocstr = str as NSString
    //        2.计算字符串的大小
    //        参数1:限制显示当前字符串的最大宽度和长度
    //        参数2:渲染方式(UsesLineFragmentOrigin)
    //        参数3:确定文字字体大小(NSFontAttributeName)字体对应的Key值  NSForegroundColorAttributeName颜色值
    //        参数4:
             let strSize = ocstr.boundingRectWithSize(CGSizeMake(200, 200), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(17)], context: nil).size
            print(strSize)
    
    //        创建lable显示文字
            let lable = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
            lable.backgroundColor = UIColor.blueColor()
            self.view.addSubview(lable)
    
            lable.text = str
            lable.numberOfLines = 0

    UIImageView

     创建UIImageView对象
          let img = UIImageView(frame: CGRectMake(100, 100, 200, 300))
    //        设置背景颜色
            img.backgroundColor = UIColor.yellowColor()
    //        添加到界面
            self.view.addSubview(img)
    //        UIImageView专有的属性
    //        image属性
    //        通过图片名去创建一个图片对象(注意:如果图片的格式是png,那么图片名的后缀可以省略,但是其他格式的图片的图片后缀名不能省略
            img.image = UIImage.init(named: "luffy")
    //        通过图片路径去创建一个图片对象
    //        将文件(处了Swift文件)放到工程中实质是放到当前应用程序的包文件中
    //        拿到工程中图片路径先要获取包文件的路径
    //        拿到包中的指定的文件路径
        let k = NSBundle.mainBundle().pathForResource("luffy", ofType: "png")
            img.image = UIImage(contentsOfFile: k!)
    //        比较通过图片名和通过图片地址创建图片对象 的两种方法
    //        1.1.通过图片名创建的图片对象在程序结束后才会被销毁,只会创建一次,通过图片地址创建的图片对象是当前图片对象不在使用的时候就销毁
    //        1.2.使用图片名创建图片的情况下:创建小图标的时候,在工程中会重复使用的图片
    //        1.3.使用图片地址创建图片对象的情况:不会频繁的在多个界面出现大图
    //        2.内容模式
            img.contentMode = .ScaleToFill
    帧动画
    //调用下面创建的帧动画的方法
          CrectImage()
    //        创建一个定时器,并且自动开启
    //        参数1.定时间 参数2.调用对象的方法 参数3.存储定时时间到了以后需要调用的方法(可以不带参也可以带参,带参数只能带一个参数,并且参数类型是NSTimer类型) 参数4.给当前的NSTimer的userInfo属性赋值 参数5. 是否重复
    //       功能每个0.1秒 self取调用一次timerAction方法
            NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction:", userInfo: nil, repeats: true)
    
        }
    //    参数:当前定时器
        func timerAction(timer:NSTimer){
    
            self.imgView.frame.origin.x += 6
    //        判断小鸟是否飞到了屏幕边缘
            if self.imgView.frame.origin.x >= self.view.bounds.width-self.imgView.bounds.width{
                self.imgView.frame.origin.y += 60
                self.imgView.frame.origin.x -= 60
    //          停止定时器
    //            timer.fireDate = NSDate.distantFuture()
    //            继续
    //            timer.fireDate = NSDate.distantPast()
    
            }
            if self.imgView.frame.origin.y >= self.view.bounds.width-self.imgView.bounds.width{
                self.imgView.frame.origin.y -= 60
                self.imgView.frame.origin.x -= 60
    
            }
    
       }
    
        func CrectImage(){
    
            //        创建一UIImageView
            //        通过图片创建一个Image:UIImageView的大小是图片大小坐标是(0.0)
            imgView = UIImageView.init(image: UIImage.init(named: "DOVE 1.png"))
            //        在界面显示
            self.view.addSubview(imgView)
            //        3.使用UIImageview播放帧动画
            //        3.1设置帧动画数组
            var imgAray = [UIImage]()
            for item in 1...18{
                let imgname = "DOVE \(item).png"
    
                let img = UIImage.init(named: imgname)
                imgAray.append(img!)
            }
    
            imgView.animationImages = imgAray
            //        3.2设置动画时间,单位秒
            imgView.animationDuration = 0.5
            //        设置动画重复次数(默认是0,无线循环)
            imgView.animationRepeatCount = 0
            //        3.4开始动画
            imgView.startAnimating()
        }

    UIButton(按钮)

    文字按钮

    //        1.创建UIButton对象
            let botton = UIButton.init(frame: CGRectMake(100, 100, 200, 200))
    //        2.设置背景颜色
            botton.backgroundColor = UIColor.redColor()
    //        3.添加到视图
            self.view.addSubview(botton)
    
    //        4.设置按钮上显示的文字
    //        参数1 想要在按钮上显示的文字  参数2 :状态
    //        Normal-》正常状态显示没有被点击   Highlighted-》高量状态按下去还没有弹起来的时候状态  ->Selected选中状态  -》.Disabled不可用状态
             botton.setTitle("世界你好布!", forState: .Normal)
            botton.setTitle("我很好!", forState: .Highlighted)
    //        设置当前按钮是否选中(默认是false)
            botton.selected = false
            botton.setTitle("世界你好1!", forState: .Selected)
    //        设置不可用(默认是true)
            botton.enabled = true
            botton.setTitle("不可用", forState: .Disabled)
    //        设置文字颜色(可以给不同的状态设置不同的颜色)
            botton.setTitleColor(UIColor.yellowColor(), forState: .Highlighted)
    //        注意按钮上的文字和颜色,必须通过对应的set方法取根据状态设置,其他相关的属性可以通过拿到titlelabel取设置
    //        设置按钮文字字体
            botton.titleLabel?.font = UIFont.systemFontOfSize(38)
    
    //        设置对齐方式
            botton.titleLabel?.textAlignment = .Center
    //        给按钮添加时间 参数1:调用方法的对象  参数2 :指定时间发生后参数1要去调用的方法(可以不带参数,带只能带一个 并且必须是UIButton) 参数3:设置事件
    //        TouchDown->按下时间  ->按下弹起事件
    //        功能当按钮被按下的时候self就会取调用buttonAction方法
            botton.addTarget(self, action: "buttonAction:", forControlEvents: .TouchDown)

    图片按钮

        let imageButton = UIButton.init(frame: CGRectMake(100, 300, 200, 200))
    //        设置背景图片  参数1 :图片  参数2 :状态
        imageButton.setImage(UIImage.init(named: "luffy4"), forState: .Normal)
    
    
            imageButton.layer.borderColor = UIColor.init(red: CGFloat(arc4random()%256)/255, green: CGFloat(arc4random()%256)/255, blue: CGFloat(arc4random()%256)/255, alpha: 1).CGColor
    
    //        添加点击时间
    
             imageButton.addTarget(self, action: "buttonAction1:", forControlEvents: .TouchDown)

    图片文字按钮

            let itbutton = UIButton.init(frame: CGRectMake(100, 500, 200, 200))
            self.view.addSubview(itbutton)
            itbutton.setTitle("你好", forState: .Normal)
    
    //        itbutton.setImage(UIImage.init(named: "luffy"), forState: .Normal)
    
            itbutton.setTitleColor(UIColor.greenColor(), forState: .Normal)
    //        添加事件
            itbutton.addTarget(self, action: "buttonAction1:", forControlEvents: .TouchDown)
            itbutton.setBackgroundImage(UIImage.init(named: "luffy"), forState: .Normal)
            itbutton.titleLabel?.font = UIFont.boldSystemFontOfSize(36)
    
    
        }

    UITextField(文本框)

     //UITextField:UIControl:UIView
            //===========UIView的属性和方法=======
            //1.创建UITextField对象
            let textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))
            //2.添加到界面上
            self.view.addSubview(textField)
            //3.设置背景颜色  
            textField.backgroundColor = UIColor.yellowColor()
    
    
            //4.再创建一个UITextField对象
            let textField2 = UITextField.init(frame: CGRectMake(100, 200, 200, 50))
            self.view.addSubview(textField2)
            textField2.backgroundColor = UIColor.yellowColor()
            textField2.delegate = self
    
            //=====textField的专有属性和方法====
            //(1)文字相关
            //1.text属性
            //设置文本输入框的内容
            textField.text = "你好世界"
            //拿到文本输入框的内容
            print(textField.text)
    
            //2.文字颜色
            textField.textColor = UIColor.brownColor()
    
            //3.设置文字字体
            textField.font = UIFont.systemFontOfSize(14)
    
            //4.设置占位文字(在输入框的内容为空的时候就会显示出来)
            textField.placeholder = "请输入账号"
    
            //5.设置文本的对齐方式(默认是:左对齐)
            textField.textAlignment = .Left
    
            //6.密文显示(默认是false)
            textField.secureTextEntry = true
    
    
            //(2)显示相关
            //1.设置文本框的样式
            textField.borderStyle = .RoundedRect
    
            //2.设置清除按钮模式(清除按钮实质是rightView)
            //(前提是输入框中有文字)
            //Always -> 一直显示
            //Never -> 从不显示(默认)
            //WhileEditing -> 当文本输入框处于编辑状态的时候才显示
            //UnlessEditing ->当文本输入框处于非编辑状态的时候才显示
            //注:当文本输入框中有光标的时候就是处于编辑状态
            textField.clearButtonMode = .Always
    
            //3.左视图
            let leftImageView = UIImageView.init(frame: CGRectMake(0,0, 40,40))
            leftImageView.image = UIImage.init(named: "luffy1")
            //设置左视图
            textField.leftView = leftImageView
            //设置左视图的显示模式(确定什么时候显示,默认是从不显示)
            textField.leftViewMode = .Always
    
            //4.右视图
            //当右视图显示的时候,清除按钮不能显示
            /*
            let rightLabel = UILabel.init(frame: CGRectMake(0, 0, 40, 40))
            rightLabel.text = "你好"
            textField.rightView = rightLabel
            textField.rightViewMode = .Always
            */
    
            //(3)键盘相关
            //1.设置键盘上返回按钮的样式
            textField.returnKeyType = .Search
    
            //2.键盘样式
            textField.keyboardType = .Default
    
            //3.设置自定义的键盘
            //自定义的键盘,只有高度有效。宽度是屏幕的宽度
            let myInputView = UIView.init(frame: CGRectMake(0, 0, 0, 256))
    
            myInputView.backgroundColor = UIColor.redColor()
            //textField.inputView = myInputView
    
            //4.设置子键盘
            let accessoryView = UIView.init(frame: CGRectMake(0, 0, 0, 50))
            accessoryView.backgroundColor = UIColor.greenColor()
            textField.inputAccessoryView = accessoryView
    
            //(4)设置代理
            //textField ->委托
            //self -> 代理
            textField.delegate = self

    拓展

    extension ViewController: UITextFieldDelegate{
    
        //1.当按键盘上的返回按钮的时候,会自动调用
        func textFieldShouldReturn(textField: UITextField) -> Bool{
    
            print("返回按钮被点击")
    
    
            //收起键盘(结束编辑)
            //1.放弃第一响应者
            textField.resignFirstResponder()
            //2.直接让指定的textField结束编辑
            textField.endEditing(true)
            //3.让self.view上的所有的子视图都结束编辑
            self.view.endEditing(true)
    
    
    
            return true
        }
    
        //2.当点击textField弹出来的键盘上的按键的时候会自动调用这个方法
        //参数1:委托
        //参数2:当前输入的字符所在的位置
        //参数3:当前输入的字符串(在键盘上按的键的值)
        //返回值:是否可改变textField的text属性();false -> 按键盘上的按键无效
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{
    
            print(range)
            print(string)
            if string == "0" {
    
                print("进入秘密页")
            }
    
            return true
        }
    
    
        //3.当文本输入框已经结束编辑的时候会自动调用这个方法
        func textFieldDidEndEditing(textField: UITextField){
    
            print("已经结束编辑")
        }
    
    
        //4.当文本输入框已经开始编辑的时候会自动调用这个方法
        func textFieldDidBeginEditing(textField: UITextField){
    
            print(textField.text)
            print("已经开始编辑")
        }
    
    
        //5.当文本输入框将要结束编辑的时候会自动调用这个方法
        //返回:设置当前的textField是否可以结束编辑(默认是true)
        func textFieldShouldEndEditing(textField: UITextField) -> Bool{
            print("将要结束编辑")
    
            //要求文本输入框中的文字长度要大于等于8的时候才能结束编辑
            if textField.text?.characters.count >= 8 {
    
                return true
            }
    
            return false
    
        }
    
    
        //6.在textField将要开始编辑的时候会自动调用
        //参数:当前这个协议对应的委托
        //返回值:设置当前的textField是否可以进行编辑(默认是true)
        func textFieldShouldBeginEditing(textField: UITextField) -> Bool{
    
            print("将要开始编辑")
    
            return true  //false ->让textField不能进行编辑
        }
    
    
    }

    .UISwitch(开关)

        func creatSwitch() {
    
            //1.创建开关对象
            //UISwitch:UIControl:UIView
            let sw = UISwitch.init(frame: CGRectMake(100, 100, 100, 50))
            //2.添加到界面上
            self.view.addSubview(sw)
    
            //3.核心属性:开关状态(默认是:关)
            //设置开关的状态
            sw.on = true  //false -> 关
            sw.setOn(false, animated: true)
            //拿到当前的状态
            print(sw.on)
    
            //4.核心方法:
            //参数1:调用方法的对象
            //参数2:指定的事件发生后参数1要去调用的方法对应的selector
            //参数3:事件
            //功能:当开关的值(开关的状态)发生改变的时候,self会去调用switchAction方法
            sw.addTarget(self, action: "switchAction:", forControlEvents: .ValueChanged)
    
            //5.设置开关开的状态的颜色(默认是绿色)
            sw.onTintColor = UIColor.redColor()
            //6.开关关闭的时候的边框颜色
            sw.tintColor = UIColor.purpleColor()
            //7.设置开关上的滑块的颜色
            sw.thumbTintColor = UIColor.yellowColor()

    UISlider(滑条)

            //1.创建滑条对象
            //UISlider:UIControl:UIView
            let slider = UISlider.init(frame: CGRectMake(100, 160, 200, 20))
            //2.添加到界面上
            self.view.addSubview(slider)
    
            //3.核心属性:值
            //value:滑块的位置对应的值(默认是0~1)
            slider.value = 0.5
            //最小值和最大值
            slider.minimumValue = 0
            slider.maximumValue = 100
    
            //4.核心方法
            slider.addTarget(self, action: "sliderAction:", forControlEvents: .ValueChanged)
    
            //5.是否连续改变
            slider.continuous = false
    //文字图片给之前的用法是一样的就不一一介绍了

    UIStepper(步进器)

            //1.创建步进器对象
            let stepper = UIStepper.init(frame: CGRectMake(100, 200, 100, 50))
            //2.添加到界面上
            self.view.addSubview(stepper)
    
            //3.核心属性:值
            //当前值
            stepper.value = 1
            print(stepper.value)
            //最小值和最大值
            stepper.minimumValue = 0
            stepper.maximumValue = 10
            //步进(每按一下加或者减,增加/减少的值)
            stepper.stepValue = 1  //步进值必须大于0
    
            //4.核心方法
            stepper.addTarget(self, action: "stepperAction:", forControlEvents: .ValueChanged)
    
            //5.设置值是否连续改变(按住不放的时候)
            stepper.continuous = false
    
            //6.设置是否重复 false->按住不放的时候不计数;true->按住不放的时候计数(默认)
            stepper.autorepeat = false
    
    
            //7.设置填充颜色
            stepper.tintColor = UIColor.redColor()

    UIProgressView(进度条)

        func creatProgress() {
    
            //1.创建进度条对象
            //UIProgressView : UIView
            let progress = UIProgressView.init(frame: CGRectMake(100, 300, 200, 20))
            progress.tag = 100
            //2.添加到界面上
            self.view.addSubview(progress)
    
            //3.核心属性
            //进度:0~1
            //设置当前进度
            progress.progress = 0.5
            progress.setProgress(0.6, animated: true)
            //4.颜色相关
            //5.图片相关

    UIActivityIndicatorView(活动指示器)

        func creatActivity() {
    
            //1.创建活动指示器对象
            //UIActivityIndicatorView : UIView
            let activity = UIActivityIndicatorView.init(frame: CGRectMake(100, 360, 50, 50))
            //2.添加到界面上
            self.view.addSubview(activity)
            //3.想要让活动指示器显示,必须让它开始动画
            activity.startAnimating()
            //4.停止动画->活动指示器就会消失
            //activity.stopAnimating()
    
            //5.设置活动指示器的样式
            activity.activityIndicatorViewStyle = .WhiteLarge

    UISegmentedControl(多段选择器)

        func creatSegement() {
    
            //1.创建多段选择器对象
            //UISegmentedControl : UIControl
            //参数1:分段选择器上的内容对应的数组
            let segemnet = UISegmentedControl.init(items: ["海贼王","火影忍者","死神"])
            segemnet.frame = CGRectMake(100, 400, 200, 50)
            //2.显示在界面上
            self.view.addSubview(segemnet)
            //3.核心属性
            //a.每个分段上的内容 ->通过创建分段选择器的时候去设置
            //b.当前选中的分段的下标(从0开始)
            segemnet.selectedSegmentIndex = 0
    
            //4.核心方法
            segemnet.addTarget(self, action: "segementAction:", forControlEvents: .ValueChanged)
    
            //5.拿到分段选择的分段数
            print(segemnet.numberOfSegments)
    
            //6.设置填充颜色
            segemnet.tintColor = UIColor.whiteColor()
        }

    以上事件响应

    extension ViewController{
    
        //4.分段选择器事件
        func segementAction(segement:UISegmentedControl) {
    
            print(segement.selectedSegmentIndex)
            //拿到当前被选中的分段的title
            print(segement.titleForSegmentAtIndex(segement.selectedSegmentIndex))
        }
    
        //3.步进器
        func stepperAction(stepper:UIStepper) {
    
            print(stepper.value)
        }
    
        //2.滑条
        func sliderAction(slider:UISlider) {
    
            print(slider.value)
            //拿到进度条
            let progress = self.view.viewWithTag(100) as! UIProgressView
            let t = slider.value/(slider.maximumValue - slider.minimumValue)
            progress.setProgress(t, animated: true)
    
        }
    
        //1.开关事件
        func switchAction(sw:UISwitch) {
    
            if sw.on {
    
                print("开关打开")
            }else{
    
                print("开关关闭")
            }
        }
    }

    警告框

           //1.创建一个表单视图
            //UIAlertController : UIViewController
            //参数1:标题
            //参数2:信息
            //参数3:风格(ActionSheet->表单,Alert->警告框)
            let alterController = UIAlertController.init(title: nil, message: "消息", preferredStyle: .Alert)
    
            //2.添加到界面上
            //参数1:需要显示的视图控制
            self.presentViewController(alterController, animated: true, completion: nil)
    
            //3.添加选项按钮
            //参数1:选项对应的按钮上的文字
            //参数2:风格
            //参数3:当当前选项对应的按钮被点击后会执行的代码对应的闭包
            let action = UIAlertAction.init(title: "相机", style: .Default) { (_) in
    
                print("相机被点击")
            }
    
            //Destructive风格
            let action2 = UIAlertAction.init(title: "相册", style: .Destructive) { (_) in
    
                print("相册被点击")
            }
    
            //Cancel风格
            let action3 = UIAlertAction.init(title: "取消", style: .Cancel) { (_) in
    
                print("取消")
            }
    
            //添加相机对应的action
            alterController.addAction(action)
            //添加相册对应的action
            alterController.addAction(action2)
    //        alterController.addAction(action3)

    UITextView (显示区文本)

            //1.创建textView对象
            //UITextView:UIScrollView : UIView
            textView = UITextView.init(frame: CGRectMake(100, 100, 200, 70))
            //2.添加到界面上
            self.view.addSubview(textView)
            //3.设置背景颜色
            textView.backgroundColor = UIColor.yellowColor()
            //4.text属性
            textView.text = " default is nil. Can be useful with the appearance proxy on custom UIView subclasses."
            //5.设置是否可以选中和编辑
            //默认是true -> 可以选中和编辑
            textView.selectable = true
    
            //6.是否可以选中删除所有
            textView.clearsOnInsertion = true
    
            //7.其他的属性和方法参考UITextField
        //在点击当前页面的时候会自动调用这个方法
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
            //5.获取选中的范围
            let range = textView.selectedRange
            print(range)
        }
    
    
    
    }
    展开全文
  • SwiftUI 中的 Animation

    2019-08-14 16:42:02
    SwiftUI 创建了一种声明式的和简单明了的 UI 构建方式。我们介绍了 List、Form 组件和绑定。它们是的 SwiftUI 使用起来更简单和强大。今天,我们将介绍另一种 SwiftUI 特性:Animations。 Animation 在 SwiftUI 中,...
  • Swift动画

    2018-03-03 11:50:47
    import UIKitclass ViewController: UIViewController { var myView:UIView? override func viewDidLoad() { super.viewDidLoad() myView = UIView() myView?.frame = CGRect(x:100,...
  • iOS8开发~Swift UI详解

    2016-06-24 14:08:09
    使用Swift来完成iOS的UI界面,其实现思想与OC实现几乎一致,只不过写法上有很大区别,个别控件较之前有较大改动。由于有纯代码强迫症,所以接下来创建一个纯代码动项目,然后在此基础上详细描述常用UI控件的Swift...
  • ...毫无疑问,Swift已经成为github上最受欢迎的语言之一,对于iOS开发者来说,学习...Mybridge AI从将近2700个开源Swift UI库中筛选了39个项目推荐给开发者,这些项目被选中的几率只有1.4%,在GitHub上的star平
  • Swift 弹性动画教程

    2016-10-09 10:29:22
    每个优雅的 iOS app 都会有一些定制的元素,定制的 UI、定制动画等等。定制、定制、定制,重要的事情重复三遍。如果你想让自己的 app 与众不同,你肯定在某些独一无二的特性上花了大量的时间,正是这些特性让你的 ...
  • AnimatedTabBar是一个Swift UI模块库,用于向iOS tabBar项目和图标添加动画
  • import UIKit class ViewController: UIViewController { @IBOutlet weak var penguinView: UIImageView! var frames: NSArray? var dieCenter: CGPoint? ... override func viewDidLoad() {
  • 一组酷炫的Swift UI库,组件和动画集合
  • 一个好看颜值高的 app 往往离不开各种好看的动画,然而复杂的动画效果的做起来可谓是每个程序员的噩梦,笔者特意搜集了10个让你相见恨晚的 iOS Swift 动画框架,助你轻松高效的搞定动画! 如果大家喜欢这类型的文章...
  • 5.Swift 跳转和动画

    2015-10-06 16:38:16
    4.Swift 跳转和动画Swift 跳转和动画 ViewController的跳转 ViewController的返回 UIView过渡动画 UIView动画效果 自定义动画ViewController的跳转选择一个button或者别的子View,按住control键拖动到目标...
  • 好友灵光一闪,说要拿Swift动画效果。然后这几天就踏上了一条不归路 先是从网上各种找资料自学呗,原生的就不多做阐述,大家都推荐一个老外写的JNW用了,感觉还是不错的,还有一个就是faceBook的pop框架。原生...
  • AnimatedTabBar是一个Swift UI模块库,用于向iOS tabBar项目和图标添加动画。.zip
  • 每个像样的iOS应用程序一定会有自定义元素、自定义UI以及自定义动画等等很多自定义的东西。 假如你想让你的应用脱颖而出,你必须花费一些时间为你的应用增添一些独特的元素,这些元素将会使你的应用耳目一新。 ...
  • 小波说雨燕 第三季 构建 swift UIUI组件集-视图集(七)Progress View进度条 学习笔记 1 import UIKit 2 3 class ViewController: UIViewController{ 4 5 @IBOutlet weak var progress: UIProgressView! 6 ...
  • 图像在swift中基于UIImageView,我们从storyboard中拖一个ImageView出来。  那么我们如何使用工程中的图片呢,点开images.xcassets,在空白处点击右键点击import,导入图片。 现在回到storyboard中,...
1 2 3 4 5 ... 20
收藏数 4,895
精华内容 1,958
热门标签