Skip to content

Instantly share code, notes, and snippets.

self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
@daoseng33
daoseng33 / textFieldMaxLength.swift
Created September 19, 2018 09:25
Let you set UITextField max length in storyboard or xib
// Set textfield max length
private var __maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let l = __maxLengths[self] else {
return Int.max // (global default-limit. or just, Int.max)
}
return l
}
@daoseng33
daoseng33 / naviEdgeGesture.swift
Created September 18, 2018 09:53
Get navigation bar edge swipe gesture back
// MARK: - View Lifecycle
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
}
// MARK: - UIGestureRecognizerDelegate
extension MyViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
UIView.setAnimationsEnabled(false) // 我夾
self.tableView.insertRows(at: indexPaths, with: .none)
UIView.setAnimationsEnabled(true) // 我夾
DispatchQueue.global(qos: .background).async { // 背景線程
let initialIndex = self.datas.count // 原本已有的 20 筆資料
var indexPaths: [IndexPath] = [] // 將要加入新項目的懵懂 array
for index in 0..<newPackOfDatas.count { // 將 indexPaths 加入新的 20 筆資料
let indexPath = IndexPath(item: initialIndex + index, section: 0) // 注意起始位置是 20(initialIndex 為還沒更新前的資料 count)
indexPaths.append(indexPath)
}
self.datas += newPackOfDatas // 將新的資料加入 datas
let maskPath = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 5, height: 5))
let maskLayer = CAShapeLayer()
maskLayer.frame = view.bounds
maskLayer.path = maskPath.cgPath
view.layer.mask = maskLayer
inputTextField.addTarget(self, action: #selector(textFieldDidChange(_:)) , for: UIControlEvents.editingChanged)
@objc func textFieldDidChange(_ textField: UITextField) {
// text field did change
}
// Draw dotted line
let viewBorder = CAShapeLayer()
viewBorder.lineDashPattern = [2, 2]
viewBorder.frame = myView.bounds
viewBorder.fillColor = nil
viewBorder.path = UIBezierPath(rect: myView.bounds).cgPath
myView.layer.addSublayer(viewBorder)
@IBAction func textFieldDidChange(_ sender: UITextField) {
if let text = sender.text {
let uppercase = text.uppercased()
sender.text = uppercase
}
}
// Set up the shape of the circle
CAShapeLayer *border = [CAShapeLayer layer];
border.path = [UIBezierPath bezierPathWithRoundedRect:self.myImageView.frame cornerRadius:self.myImageView.frame.size.height/2].CGPath;
border.anchorPoint = CGPointMake(0.5, 0.5);
border.position= CGPointMake(self.myImageView.bounds.origin.x, self.myImageView.bounds.origin.y);
border.fillColor = [UIColor clearColor].CGColor;
border.strokeColor = [UIColor blueColor].CGColor;
border.lineWidth = 5; [self.view.layer addSublayer:border];
// Configure animation
// draw Border