当前位置: 首页 > news >正文

江西省住房与城乡建设厅网站网站建设 微信开发 h5开发

江西省住房与城乡建设厅网站,网站建设 微信开发 h5开发,广告模板制作,如何自己创建网页Swift纯代码模式iOS开发入门教程项目初始化#xff08;修改为纯代码项目#xff09;安装第三方库#xff08;以SnapKit库为例#xff09;桥接OC库#xff08;QMUIKit#xff09;封装视图并进行导航跳转示例#xff1a;使用 TangramKit 第三方UI布局库应用国际化添加 R.s… Swift纯代码模式iOS开发入门教程项目初始化修改为纯代码项目安装第三方库以SnapKit库为例桥接OC库QMUIKit封装视图并进行导航跳转示例使用 TangramKit 第三方UI布局库应用国际化添加 R.swift 框架颜色统一管理图片相同网络请求 Moya网络请求 Moya/RxSwift解析 json项目初始化修改为纯代码项目 1.修改 AppDelegate.swift 和 ViewController.swift 文件 2.删除 SceneDelegate.swift 和 Main.storyboard 文件 3.修改如图所示项 安装第三方库以SnapKit库为例 安装CocoaPods $ gem install cocoapods初始化项目添加Podfile配置文件 $ pod init修改Podfile文件 # Uncomment the next line to define a global platform for your project # platform :ios, 9.0target ExDemoApp do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!# Pods for ExDemoApppod SnapKitend安装 $ pod install打开ExDemoApp.xcworkspace项目并向ViewController.swift添加示例代码 // // ViewController.swift // ExDemoApp // // Created by ProsperLee on 2023/2/20. //import UIKit import SnapKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor .whitelet label: UILabel UILabel()view.addSubview(label)label.text Hellolabel.textColor .redlabel.snp.makeConstraints { make inmake.centerX.equalToSuperview()make.centerY.equalToSuperview()}}}运行效果 桥接OC库QMUIKit 安装QMUIKit # Podfile 文件# Uncomment the next line to define a global platform for your project # platform :ios, 9.0target ExDemoApp do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!# Pods for ExDemoApppod SnapKitpod QMUIKitend$ pod install方式一触发xcode自动创建桥接文件机制 方式二手动创建xcode桥接文件 测试桥接是否成功 // // ViewController.swift // ExDemoApp // // Created by ProsperLee on 2023/2/20. //import UIKit import SnapKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor .whitelet button QMUIButton()button.adjustsButtonWhenHighlighted truebutton.setTitle(按钮, for: .normal)button.setTitleColor(.white, for: .normal)button.backgroundColor UIColor.tintColor;button.highlightedBackgroundColor UIColor.tintColor;button.layer.cornerRadius 4view.addSubview(button)button.snp.makeConstraints { make inmake.width.equalTo(200)make.height.equalTo(40)make.centerX.equalToSuperview()make.centerY.equalToSuperview()}button.addTarget(self, action: #selector(buttonClick), for: UIControl.Event.touchUpInside)}objc func buttonClick(){print(点击了)}}封装视图并进行导航跳转 效果 项目目录结构 配置导航跳转 // // AppDelegate.swift // ExDemoApp //import UIKitmain class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool {let controller ViewController()window UIWindow(frame: UIScreen.main.bounds)// 包装一层导航控制器用于在视图间跳转window!.rootViewController UINavigationController(rootViewController: controller)window?.makeKeyAndVisible()return true}}创建要跳转到的Controller // // SettingController.swift // 设置界面 //import UIKitclass SettingController: UIViewController {override func viewDidLoad() {super.viewDidLoad()title 设置界面view.backgroundColor UIColor(red: 250 / 255, green: 250 / 255, blue: 250 / 255, alpha: 1)} }进行跳转 // // ViewController.swift // ExDemoApp //import UIKit import SnapKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()let button QMUIButton()button.setTitle(进入设置页面, for: .normal)view.addSubview(button)button.addTarget(self, action: #selector(goto(_:)), for: .touchUpInside)button.snp.makeConstraints{make inmake.center.equalToSuperview()}}objc func goto(_ sender: QMUIButton){print(sender.titleLabel!.text!)let target SettingController()navigationController?.pushViewController(target, animated: true)} }封装视图组件 // // CellView.swift // ExDemoApp //import UIKit import SnapKitclass CellView: UIView {/// 左侧图标lazy var leftIcon: UIImageView {let v UIImageView();v.image UIImage(named: Setting)return v;}()/// 单元格标题lazy var title: UILabel {let v UILabel();v.text Settingreturn v;}()/// 右侧图标lazy var rightIcon: UIImageView {let v UIImageView();v.image UIImage(named: More)return v;}()// 初始化组件init() {super.init(frame: CGRect.zero)innerInit()}// 从数据中初始化一个视图(必需)required init?(coder: NSCoder) {super.init(coder: coder)innerInit()}// 组件UIView初始化func innerInit(){backgroundColor .whiteaddSubview(leftIcon)addSubview(title)addSubview(rightIcon)}// 当view被首次添加进父级视图的时候调用override func didMoveToSuperview() {super.didMoveToSuperview()leftIcon.snp.makeConstraints{make inmake.width.equalTo(32)make.height.equalTo(32)make.centerY.equalToSuperview()make.left.equalToSuperview().offset(16)}title.snp.makeConstraints{make inmake.centerY.equalToSuperview()make.left.equalTo(leftIcon.snp.right).offset(10)}rightIcon.snp.makeConstraints{make inmake.width.equalTo(20)make.height.equalTo(20)make.centerY.equalToSuperview()make.right.equalToSuperview().offset(-16)}}}使用组件并配置点击事件 // // SettingController.swift // 设置界面 //import UIKitclass SettingController: UIViewController {// 懒加载单元格并配置相关属性lazy var cellView: CellView {let v CellView();v.leftIcon.image UIImage(named: Setting)v.title.text 设置// 单元格整体添加点击事件v.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onSettingClick(recognizer:))))return v;}()override func viewDidLoad() {super.viewDidLoad()title 设置界面view.backgroundColor UIColor(red: 250 / 255, green: 250 / 255, blue: 250 / 255, alpha: 1)view.addSubview(cellView)cellView.snp.makeConstraints{make inmake.height.equalTo(40)make.top.equalTo(view.safeAreaLayoutGuide.snp.top);make.left.equalToSuperview()make.right.equalToSuperview()}}// 点击事件objc func onSettingClick (recognizer:UITapGestureRecognizer){print(recognizer)cellView.title.text 点击了}} 示例使用 TangramKit 第三方UI布局库 pod TangramKitlet horzLayout TGLinearLayout(.horz) horzLayout.tg_gravity TGGravity.horz.fill // 所有子视图水平宽度充满布局这样就不需要分别设置每个子视图的宽度了。 horzLayout.backgroundColor UIColor.white horzLayout.tg_width.equal(.fill) // 高度填充父布局的所有剩余空间。 horzLayout.tg_height.equal(60) horzLayout.tg_bottom.equal(TGLayoutPos.tg_safeAreaMargin) view.addSubview(horzLayout)let v1 QMUIButton(); v1.setTitle(v1, for: .normal) v1.backgroundColor .red v1.tg_height.equal(.fill) horzLayout.addSubview(v1)let v2 QMUIButton(); v2.setTitle(v2, for: .normal) v2.backgroundColor .green v2.tg_height.equal(.fill) horzLayout.addSubview(v2)let v3 QMUIButton(); v3.setTitle(v3, for: .normal) v3.backgroundColor .blue v3.tg_height.equal(.fill) horzLayout.addSubview(v3)应用国际化 引用公共字符串 /* Localizable.stringsExDemoApp */HomeMenuText 首页;// // ViewController.swift // ExDemoApp //import UIKit import TangramKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor UIColor(red: 250 / 255, green: 250 / 255, blue: 250 / 255, alpha: 1)let horzLayout TGLinearLayout(.horz)horzLayout.tg_gravity TGGravity.horz.fillhorzLayout.backgroundColor UIColor.orangehorzLayout.tg_width.equal(.fill)horzLayout.tg_height.equal(60)horzLayout.tg_bottom.equal(TGLayoutPos.tg_safeAreaMargin)view.addSubview(horzLayout)let v1 QMUILabel();v1.text NSLocalizedString(HomeMenuText, comment: ) // 引用公共字符串v1.backgroundColor .redv1.textAlignment .center;v1.tg_width.equal(.fill)v1.tg_height.equal(.fill)horzLayout.addSubview(v1)let v2 QMUILabel();v2.text v2v2.backgroundColor .greenv2.textAlignment .center;v2.tg_width.equal(.fill)v2.tg_height.equal(.fill)horzLayout.addSubview(v2)let v3 QMUILabel();v3.text v3v3.backgroundColor .bluev3.textAlignment .center;v3.tg_width.equal(.fill)v3.tg_height.equal(.fill)horzLayout.addSubview(v3)}}启用国际化修改系统语言查看效果 应用名称国际化修改系统语言查看效果 添加 R.swift 框架 用于优化资源获取访问的方式如图像、字体等 1.添加依赖 pod R.swift2.创建运行脚本 $PODS_ROOT/R.swift/rswift generate $SRCROOT/R.generated.swift$SRCROOT/R.generated.swift3.执行编译生成 R.generated.swift 文件并将其添加到项目根目录 4.使用 /* Localizable.stringsExDemoApp */HomeMenuText %, 首页;// // ViewController.swift // ExDemoApp //let v1 QMUILabel(); v1.text NSLocalizedString(R.string.localizable.homeMenuText(你好), comment: ) v1.backgroundColor .red v1.textAlignment .center; v1.tg_width.equal(.fill) v1.tg_height.equal(.fill) horzLayout.addSubview(v1)颜色统一管理图片相同 引入动态颜色生成库 pod DynamicColor实现 // // SuperUIColorExtension.swift // ExDemoApp // // 扩展系统颜色 //import Foundation import DynamicColorextension UIColor {/// 背景颜色 浅色static var bgLightColor: UIColor{return DynamicColor(hex: 0xfafafa)}/// 背景颜色 深色static var bgDarkColor: UIColor{return DynamicColor(hex: 0x000000)}/// 背景颜色static var bgColor: UIColor{return .initColor(normal: bgLightColor, dark: bgDarkColor)}/// 红色static var red: UIColor{return DynamicColor(hex: 0xff0000)}/// 绿色static var green: UIColor{return DynamicColor(hex: 0x00ff00)}/// 蓝色static var blue: UIColor{return DynamicColor(hex: 0x00ffff)}/// 深浅颜色随系统切换static func initColor(normal: UIColor, dark: UIColor) - UIColor{if #available(iOS 13.0, *) {return UIColor{ traitCollection - UIColor inreturn traitCollection.userInterfaceStyle .dark ? dark : normal}}else{return normal}}}// // ViewController.swift // ExDemoApp //import UIKit import TangramKit import DynamicColorclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor .bgColorlet horzLayout TGLinearLayout(.horz)horzLayout.tg_gravity TGGravity.horz.fillhorzLayout.backgroundColor .grayhorzLayout.tg_width.equal(.fill)horzLayout.tg_height.equal(60)horzLayout.tg_bottom.equal(TGLayoutPos.tg_safeAreaMargin)view.addSubview(horzLayout)let v1 QMUIButton()v1.setTitle(v1, for: .normal)v1.setTitleColor(.red, for: .normal)v1.tg_width.equal(.fill)v1.tg_height.equal(.fill)horzLayout.addSubview(v1)let v2 QMUIButton()v2.setTitle(v2, for: .normal)v2.setTitleColor(.green, for: .normal)v2.tg_width.equal(.fill)v2.tg_height.equal(.fill)horzLayout.addSubview(v2)let v3 QMUIButton()v3.setTitle(v3, for: .normal)v3.setTitleColor(.blue, for: .normal)v3.tg_width.equal(.fill)v3.tg_height.equal(.fill)horzLayout.addSubview(v3)}}网络请求 Moya 允许http请求 ?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dictkeyNSAppTransportSecurity/keydictkeyNSAllowsArbitraryLoads/keytrue//dict /dict /plist配置请求地址 // // Config.swift // ExDemoApp //import Foundationclass Config{/// 接口地址static let API_URL http://127.0.0.1:8080/; }引入网络请求框架 pod Moya使用请求 // 服务端 let http require(http);http.createServer((req, res) {res.writeHead(200, { Content-type: application/json });if (req.url /api/getUserInfo req.method POST) {let data ;req.on(data, (chunk) {data chunk;});req.on(end, () {console.log(JSON.stringify({code: 200, id: Math.random(), ...JSON.parse(data)}));res.end(JSON.stringify({code: 200, id: Math.random(), ...JSON.parse(data)}));});} }).listen(8080);console.log(http://127.0.0.1:8080/);// // ViewController.swift // ExDemoApp //import UIKit import TangramKit import DynamicColor import Moyaclass ViewController: UIViewController {var label: QMUILabel QMUILabel()override func viewDidLoad() {super.viewDidLoad()view TGRelativeLayout()view.backgroundColor .bgColorlet button QMUIButton()button.setTitle(请求, for: .normal)button.tg_width.equal(.wrap)button.tg_height.equal(.wrap)button.tg_centerX.equal(0)button.tg_centerY.equal(0)button.addTarget(self, action: #selector(handleClick(_ :)), for: .touchUpInside)view.addSubview(button)label.text 暂无数据label.tg_width.equal(.wrap)label.tg_height.equal(.wrap)label.tg_centerX.equal(0)label.tg_centerY.equal(30)view.addSubview(label)}objc func handleClick (_ sender: QMUIButton){let provider MoyaProviderDefaultService()provider.request(.getUserInfo(firstName: Lee, lastName: Prosper)) { result inswitch result {case let .success(moyaResponse):if moyaResponse.statusCode 200 {let data: String String(data: moyaResponse.data, encoding: .utf8)!self.label.text dataprint(data)}case let .failure(error):print(error)}}}}/// 默认服务 enum DefaultService {case getUserInfo(firstName: String, lastName: String) }extension DefaultService: TargetType {/// 请求地址var baseURL: URL { return URL(string: Config.API_URL)! }/// 接口地址var path: String {switch self {case .getUserInfo:return /api/getUserInfo}}/// 请求方式var method: Moya.Method {switch self {case .getUserInfo:return .post}}/// 请求参数var task: Task {switch self {case let .getUserInfo(firstName, lastName):return .requestParameters(parameters: [first_name: firstName, last_name: lastName], encoding: JSONEncoding.default)}}/// 请求头var headers: [String: String]? {let headers: DictionaryString, String [:]return headers} }网络请求 Moya/RxSwift Moya/RxSwift 响应式编程可以对数据在请求前做一些处理如provider.rx.request(.xxx()).filter{... in ...}.subscribe { ... } 引入RxSwift # pod Moya pod Moya/RxSwiftpod NSObjectRx使用 // ViewController.swiftimport RxSwift import NSObject_Rxobjc func handleClick (_ sender: QMUIButton){let provider MoyaProviderDefaultService()provider.rx.request(.getUserInfo(firstName: Lee, lastName: Prosper)).subscribe { event inswitch event {case let .success(response):if response.statusCode 200 {let data: String String(data: response.data, encoding: .utf8)!self.label.text dataprint(data)}case let .failure(error):print(error)}}.disposed(by: rx.disposeBag) // 用于释放subscribe资源}解析 json pod HandyJSON// ViewController.swiftimport Moya import RxSwift import NSObject_Rx import HandyJSONclass UserInfo: HandyJSON {var code: Int! // 不允许空var id: Double! // 不允许空var first_name: String? // 允许空var last_name: String? // 允许空required init() {} }let provider MoyaProviderDefaultService() provider.rx.request(.getUserInfo(firstName: Lee, lastName: Prosper)).subscribe { event inswitch event {case let .success(response):if response.statusCode 200 {let data: String String(data: response.data, encoding: .utf8)!if let object UserInfo.deserialize(from: data) {self.label.text \(object.code!) \n \(object.id!) \n \(object.first_name!) \n \(object.last_name!)print(object.toJSONString(prettyPrint: true)!) // 转json字符串 - {id:0.86519265844265569,last_name:Prosper,code:200,first_name:Lee}}}case let .failure(error):print(error)}}.disposed(by: rx.disposeBag) // 用于释放subscribe资源
http://www.dnsts.com.cn/news/265917.html

相关文章:

  • 黄岛做网站的公司深圳响应式网站找哪里
  • iH5做网站照片变年轻在线制作网站
  • 网站建站 优化湖北seo优化诊断
  • 网站方案设计与论证建立网站成本
  • 招聘网站的简历可以做几份ui设计技术培训学校
  • 自微网站做视频网站用什么格式好
  • 网站建设柒首先金手指8医院加强网站建设
  • 王烨凡兰州模板网站seo价格
  • 阿里云网站模板百度关键词权重查询
  • 南宁市网站建设价格百度引流怎么推广
  • 公司网站建设代理怎么做做外贸英文网站
  • wordpress建2个网站哪家公司建网站好
  • 做网站后台数据库建设免费行情软件app大全
  • 防城港建设局网站哪里有做网站培训的
  • 只有一个域名怎么做网站网站内容优化的重要性
  • 做游戏直播什么游戏视频网站好wordpress 太慢
  • 广州市酒店网站设计网站建设与排名
  • 网站推广服务商公司网站制作新手教程
  • 自己做网站代理产品在本地做装修在那个网站好
  • 建设网站的主要流程达州市住房和建设厅网站
  • 做签证宾馆订单用啥网站佛山南海建设局网站
  • 许昌住房和城乡建设局网站网站前期推广
  • 重庆设计公司网站个人网站首页内容
  • 做网站大连公司商标设计logo图案
  • 苏州网站建设丶好先生科技网站设计公司深圳
  • 网站数据流分析怎么做域名到期对网站的影响
  • 深圳制作网站软件网站定制二次开发
  • 苏州网站快速推广江苏免费建站
  • 济南建站详情主页网站建设
  • 做熟食的网站美食网站佛山公益网站制作