1.当前页面弹出支付宝付款码结账,请求接口付款成功,返回页面会提示支付成功,但是本来支付页面成功支付后面的操作不会走了,这个怎么解决?
使用根控制器的navigationController的push跳转。
UIApplication.shared.navigationController?.pushViewController(vc, animated: false)
2.生成高清二维码并添加logo:
http://www.cocoachina.com/ios/20181116/25492.html
3.小结weak和unowned:
个人总结两者的异同:
相同点:
weak和unowned都可以解决Reference Cycle,所以他们相同的地方:
都不会对object进行reference count(引用计数)加1的操作
都可以解决reference cycle这个问题(这句好像有点废)
不同点:
weak修饰的属性,只能是变量(var),同时只能是Optional类型,因为在模拟实际情境中,这个属性有可能是没有具体值的。换言之你需要手动检查解包后才能使用——所以朝阳群众说这样更安全;
unowned修饰的属性,不能是Optional类型(一定是nonoptional类型),(想象一样,银行肯定要有了「客户」之后,才能制作该「客户」的「信用卡」);
weak属性,初始化后也可以为nil;
unowned属性,初始化后一定都有值;
weak比unowned更安全(原因见「不同点」第一条);
unowned比weak性能好一点点(出处——倒数第二段)
4.FPS检测界面卡顿:
理想的FPS值为60左右,过低的话就用该进性优化了,根据WWDC的说法,当FPS 低于45的时候,用户就会察觉到到滑动有卡顿。
下面用Swift封装了一个记录FPS检测的小控件:
//
// HDLFPSLabel.swift
// HaidilaoPad
//
// Created by 彭思 on 2018/11/19.
// Copyright © 2018年 HongHuoTai. All rights reserved.
//
import UIKit
class HDLFPSLabel: UILabel {
private var _link :CADisplayLink?
private var _count:Int = 0
private var _lastTime:TimeInterval = 0
private let _defaultSize = CGSize(width: 55, height: 20)
override init(frame: CGRect) {
var targetFrame = frame
if frame.size.width == 0 && frame.size.height == 0{
targetFrame.size = _defaultSize
}
super.init(frame: targetFrame)
self.layer.cornerRadius = 5
self.clipsToBounds = true
self.textAlignment = .center
self.isUserInteractionEnabled = false
self.textColor = UIColor.white
self.backgroundColor = UIColor(white: 0, alpha: 0.7)
self.font = UIFont(name: "Menlo", size: 14)
weak var weakSelf = self
_link = CADisplayLink(target: weakSelf!, selector:#selector(tick(link:)));
_link!.add(to: RunLoop.main, forMode:RunLoopMode.commonModes)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@objc func tick(link:CADisplayLink) {
if _lastTime == 0 {
_lastTime = link.timestamp
return
}
_count += 1
let delta = link.timestamp - _lastTime
if delta < 1 {
return
}
_lastTime = link.timestamp
let fps = Double(_count) / delta
_count = 0
let progress = fps / 60.0;
self.textColor = UIColor(hue: CGFloat(0.27 * ( progress - 0.2 )) , saturation: 1, brightness: 0.9, alpha: 1)
self.text = "\(Int(fps+0.5))FPS"
}
}
PS:在我的测试机上没有感觉卡顿,但是门店有人反映卡顿,大神们有没有什么好的解决办法呢?