ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我在树食中学到的

2022-01-21 11:31:21  阅读:141  来源: 互联网

标签:style 中学 return self 树食 json let func


继续加油哦!

关于动画

CGAffineTransform:UIView有个属性transform,是CGAffineTransform类型。可以使其在二维界面做旋转、平移、缩放单独或者组合动画

平移

UIView.animate(withDuration: 2.0) {
            self.showview.transform = CGAffineTransform(translationX: 100, y: 100)
        }

缩放

UIView.animate(withDuration: 2.0) {
            self.showview.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
        }

旋转

UIView.animate(withDuration: 2.0) {
            self.showview.transform = CGAffineTransform(rotationAngle: 4 * M_PI_4)
        

rotationAngle后面的参数是旋转的角度

关于报错(在解析JSON数据时)

Thread 1: fatal error: Nil was found unexpectedly while expanding optional values

线程1:致命错误:在展开可选值时意外发现nil

// 文件路径
let path = Bundle.main.path(forResource: "homeList", ofType: "json")
 // json转NSData
let jsonData = NSData(contentsOfFile: path!)
// 解析json
let json = JSON(jsonData!)
homeData = JSONDeserializer<HomeData>.deserializeFrom(json: json["data"].description)!

此时path! jsonData! ()! 后面都报了此错误,原因是path等是可选类型可能为nil了

那么修改的方法就是不让path为nil

if let path = Bundle.main.path(forResource: "homeList", ofType: "json"){
   //json转NSData
    let jsonData = NSData(contentsOfFile: path)
     //解析json
     let json = JSON(jsonData!)
     homeData = JSONDeserializer<HomeData>.deserializeFrom(json: json["data"].description)!
 }

关于Date

NSCalendar 获得年份(月份与日子同理)

func year() -> Int {
        let calendar = NSCalendar.current
        let com = calendar.dateComponents([.year, .month, .day], from: self)
        return com.year!
    }

DateFormatter 获得时间(小时为例)

func hour() -> Int {
        let formatter = DateFormatter()
        formatter.dateFormat = "HH:mm:ss.SSS"
        let time = formatter.string(from: self) as String
        let hour = time.prefix(2)
        return Int(hour) ?? 25
    }

今天星期几

func WeekDay() -> Int {
        let interval = Int(timeIntervalSince1970)//1970年以来的时间间隔
        let days = Int(interval / 86400) //24*60*60
        let weekday = ((days + 4) % 7 + 7) % 7
        return weekday == 0 ? 7 : weekday
    }

还有一种方法

func getWeekDay(dateTime: String) -> String {
        let dateFmt = DateFormatter()
        dateFmt.dateFormat = "yyyy-MM-dd"
        let date = dateFmt.date(from: dateTime)
        let interval = Int(date!.timeIntervalSince1970)
        let days = Int(interval / 86400)
        let weekday = ((days + 5) % 7 + 7) % 7
        let weekDays = ["周一", "周二", "周三", "周四", "周五", "周六"]
        return weekDays[weekday]
    }

当月天数

func countOfDaysInMonth() -> Int {
        let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
        let range = (calendar as NSCalendar?)?.range(of: NSCalendar.Unit.day, in: NSCalendar.Unit.month, for: self)
        return (range?.length)!
    }

当月第一天是星期几

func firstWeekDay() -> Int {
        //1.Sun 2.Mon...
        let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
        let firstWeekDay = (calendar as NSCalendar?)?.ordinality(of: NSCalendar.Unit.weekday, in: NSCalendar.Unit.weekOfMonth, for: self)
        return firstWeekDay! - 1
    }

闭包回调

在一个CollectionView1中还有一个CollectionView2,当1要将解析后的数据传值到2中时

1、在2上声明一个闭包

public var cellCallBack: ((Dish, Species) -> Void)?

2、在2的collectionView中didSelectItemAt函数中进行调用(可以不在此函数中,但必须有个东西调用此闭包,例如button中的addTarget)

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if  let callback = cellCallBack {
            callback(data[indexPath.row], FoodType[indexPath.row])
        }
    }

3、在1中cellForItemAt函数中定义此闭包

cell.cellCallBack = { data, type in
                let vc = DishDetailViewController()
                vc.updateUI(with: data, types: type)
                self.navigationController?.pushViewController(vc, animated: true)
            }

这样当点击CollectionView2上的cell时会执行闭包

关于PageView

先设置PageStyle

lazy var style: PageStyle = {
        let style = PageStyle()
        style.isTitleScaleEnabled = true//是否启用了标题视图滚动
        style.titleMargin = 20//标题边缘
        style.titleInset = 20//标题插图
        style.titleSelectedFont = UIFont.systemFont(ofSize: 10)
        style.isTitleScaleEnabled = true//是否启用了标题比例
        return style
    }()

再设置title

let title = ["头条", "视频", "娱乐", "要问", "体育", "科技", "图片", "游戏", "房产"]

设置childViewController(这里是添加了addChild)

for i in 0..<title.count {
            let controller = ContentViewController()
            controller.view.backgroundColor = UIColor.randomColor
            controller.index = i
            addChild(controller)
        }

​ 最后设置PageView

let y = UIApplication.shared.statusBarFrame.height + (navigationController?.navigationBar.frame.height ?? 0)
let size = UIScreen.main.bounds.size
        
let pageView = PageView(frame: CGRect(x: 0, y: y, width: size.width, height: size.height - y), style: style, titles: title, childViewControllers: children, currentIndex: 1)

关于 UISearchController

lazy var searchController: UISearchController = {
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self//搜索结果更新程序
  			//总是显示搜索框,如果不设置,会随着滚动而消失
				navigationItem.hidesSearchBarWhenScrolling = false
        controller.delegate = self
        controller.searchBar.delegate = self
        return controller
    }()
UISearchBarDelegate
extension SearchViewController: UISearchBarDelegate {
    func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        return true;
    }
    
    func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
        return true;
    }
}
UISearchControllerDelegate, UISearchResultsUpdating
extension SearchViewController: UISearchControllerDelegate, UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        let inputStr = searchController.searchBar.text
        if resultData.count > 0 {
            resultData.removeAll()
        }
        for item in data {
            if((item.name.lowercased() as NSString).range(of: inputStr?.lowercased() ?? "").location != NSNotFound) {
                resultData.append(item)
            }
        }
        self.tableView.reloadData()
    }

    func didPresentSearchController(_ searchController: UISearchController) {
        
        if out {
            searchController.searchBar.becomeFirstResponder()
            self.out = false
        }
        
    }
}

标签:style,中学,return,self,树食,json,let,func
来源: https://blog.csdn.net/weixin_52259822/article/details/122617675

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有