IOS-Swift面试相关基础

文章目录

Xcode部分

Storyboard基础控件:

视图控制器在SB种称为场景

控件:

1.Label:可包含任意数量的文本,UILabel可收缩,换行以及截断文本。
2.Button:按钮。
3.Segmentel Control:可表示单个或多个选择或命令列表,可显示文本或图像,但无法同时显示两者。
4.Text Field:用户可编辑的文本框。
5.Slider:可滑动的水平条。
6.Switch:显示给定的Bool状态,点击控件可以切换状态。
7.Activity Indicator View:转菊花。
8.Progress View:进度条。

基础交互手势:
import UIKit

class ViewController: UIViewController {
   

    @IBOutlet weak var tapLabel: UILabel!
    @IBOutlet weak var pinchLabel: UILabel!
    @IBOutlet weak var rotationLabel: UILabel!
    @IBOutlet weak var swipeLabel: UILabel!
    @IBOutlet weak var panLabel: UILabel!
    @IBOutlet weak var screenEdgePanLabel: UILabel!
    @IBOutlet weak var longPressLabel: UILabel!
    
    override func viewDidLoad() {
   
        super.viewDidLoad()
        
        //tapLabel.isUserInteractionEnabled = true //动态打开允许用户交互属性
        
        //轻触手势
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(tap:)))
        //tap.numberOfTapsRequired = 1 //指定-需要轻点几下才会触发监听函数(handleTap)
        //tap.numberOfTouchesRequired = 1 //指定-需要用几个手指轻点才会触发监听函数(handleTap)
        tapLabel.addGestureRecognizer(tap)
        
        //可以给这个手势添加更多的事件监听函数,也就是说用户轻点之后会发生好几件事情。所有手势通用。
        //tap.addTarget(self, action: #selector(handleTap2(sender:)))
        
        //捏合手势-缩小和放大用-缩放
        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(pinch:)))
        pinchLabel.addGestureRecognizer(pinch)
        
        //旋转手势
        let rotation = UIRotationGestureRecognizer(target: self, action: #selector(handleRotation(rotation:)))
        rotationLabel.addGestureRecognizer(rotation)
        
        //轻扫手势
        let swipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(swipe:)))
        //swipe.direction = .right //指定轻扫方向
        //swipe.numberOfTouchesRequired = 1 //指定需要几个手指轻扫
        swipeLabel.addGestureRecognizer(swipe)
        
        //平移拖拽手势--开发中用的比较多
        let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(pan:)))
        //pan.maximumNumberOfTouches 指定最多几个手指-默认是无限多-一般不设定
        //pan.minimumNumberOfTouches = 1 //指定至少需要几个手指才能拖拽
        panLabel.addGestureRecognizer(pan)
        
        //屏幕边缘平移手势--属于Pan手势的一种
        let screenEdgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleScreenEdgePan(screenEgdePan:)))
        //指定从屏幕的哪边可以滑。不受屏幕转向影响,比如规定左边,横屏时还是从左边滑
        screenEdgePan.edges = .left
        //screenEdgePanLabel没有靠到边缘,所以不能给他加,这里给rootview加
        view.addGestureRecognizer(screenEdgePan)
        
        //长按手势
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(longPress:)))
        //longPress.numberOfTapsRequired = 0 //指定长按前需要轻点的次数
        //longPress.numberOfTouchesRequired = 1
        //longPress.minimumPressDuration = 0.5 //最小长按时间
        //longPress.allowableMovement = 10.0 //长按时允许移动的最大距离-容错范围,单位:点
        longPressLabel.addGestureRecognizer(longPress)
        
    }

    //离散型(一次性)手势
    @IBAction func handleIBTap(IBTap: UITapGestureRecognizer){
   
        guard let IBTapLabel = IBTap.view as? UILabel else{
   return}
        //就算是离散手势,也要在做操作之前check一下state
        if IBTap.state == .ended{
   
            IBTapLabel.text = "被翻牌了"
        }
    }
    
    //离散型(一次性)手势
    @objc func handleTap(tap: UITapGestureRecognizer){
   
        if tap.state == .ended{
   
            tapLabel.text = "被翻牌了"
        }
    }
    
    //持续型手势-持续调用这个函数
    @objc func handlePinch(pinch: UIPinchGestureRecognizer){
   
        if pinch.state == .began || pinch.state == .changed{
   
            pinchLabel.transform = pinchLabel.transform.scaledBy(x: pinch.scale, y: pinch.scale)
            //pinch.scale表示总缩放比,transform里已包含上一帧的缩放比了,不能重复相乘,所以把他归为初始值1
            pinch.scale = 1.0
            //print(pinch.velocity) //缩放速度(放大为正,缩小为负) 单位:缩放比/秒
        }
    }
    //持续型手势-持续调用这个函数
    @objc func handleRotation(rotation: UIRotationGestureRecognizer){
   
        if rotation.state == .began || rotation.state == .changed{
   
            rotationLabel.transform = rotationLabel.transform.rotated(by: rotation.rotation)
            //同scale
            rotation.rotation = 0.0
            //rotation.velocity //旋转速度(顺时针为正,逆时针为负) 单位:弧度/秒
        }
    }
    
    //离散型(一次性)手势
    @objc func handleSwipe(swipe: UISwipeGestureRecognizer){
   
        if swipe.state == .ended{
   
            swipeLabel.text = "被翻牌了"
        }
    }
    
    //持续型手势-持续调用这个函数
    var startCenter = CGPoint.zero
    @objc func handlePan(pan: UIPanGestureRecognizer){
   
        //手指在panLabel的父视图中平移的x和y(含上下左右各多少四个信息)
        let translation = pan.translation(in: panLabel.superview)
        //pan.setTranslation(<#T##translation: CGPoint##CGPoint#>, in: <#T##UIView?#>)//设置手指在某个view中的偏移量
        //pan.velocity(in: <#T##UIView?#>)//平移速度 单位:point/秒(CGPoint,有x和y)
        
        if pan.state == .began{
   
            startCenter = panLabel.center//开始时先把当前panlabel的center保存在startcenter中
        }
        //.began, .changed, .ended 状态时更新panlabel的位置(改center)
        if pan.state != .cancelled{
   
            panLabel.center = CGPoint(x: startCenter.x + translation.x, y: startCenter.y + translation.y)
        }else{
   
            //.cancelled 时恢复到原位置-被系统事件中断-比如来电话
            panLabel.center = startCenter
        }
        
    }
    
    //持续型手势-持续调用这个函数
    @objc func handleScreenEdgePan(screenEgdePan: UIScreenEdgePanGestureRecognizer){
   
        let x =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值