swift 類似高德地圖和58同城上下滑動view
演示:
程式碼地址: https://github.com/RainManGO/PanView
主要在Xib中使用:xib的view直接繫結panview即可。如圖:
程式碼:
//
// PanView.swift
//
//
// Created by ZY on 2018/5/23.
// Copyright © 2018年 zy. All rights reserved.
//
import UIKit
enum slideStates {
case top
case bottom
}
class PanView: UIView {
var panViewStates: slideStates = .bottom //預設狀態是在底部
var upPointY = 0.0 //最高值
var middleY = 0.0 //滑動view 中間判定值
var bottionY = 0.0 //最低值
var currentY = 0.0 //當前的Y值
let maxtop = 80.0
override func awakeFromNib() {
super.awakeFromNib()
countY()
addPanRecoginer()
addTapRecoginer()
}
}
//計算資料值
extension PanView {
func countY(){
upPointY = maxtop //最高值
middleY = Double(((self.superview?.frame.height)! - CGFloat(maxtop))/2) //滑動view 中間判定值
bottionY = Double(self.frame.minY) //最低值
currentY = bottionY
}
}
//手勢
extension PanView {
func addPanRecoginer(){
let panRecoginer = UIPanGestureRecognizer.init(target: self, action: #selector(panHandle(pan:)))
self.addGestureRecognizer(panRecoginer)
}
func addTapRecoginer(){
let tapRecoginer = UITapGestureRecognizer.init(target: self, action: #selector(tapHandle(tap:)))
self.addGestureRecognizer(tapRecoginer)
}
}
//事件
extension PanView {
@objc func panHandle(pan:UIPanGestureRecognizer){
let translation = pan.translation(in: self.superview)
let transY = Double(translation.y)
if pan.state == .changed {
if Double(self.frame.origin.y) < upPointY{
currentY = upPointY
}else if Double(self.frame.origin.y) > bottionY{
currentY = bottionY
}else{
self.frame.origin.y = CGFloat(currentY + transY)
}
}else if pan.state == .ended {
if (currentY + transY > upPointY) && (currentY + transY < middleY) { //如果當前位置在最上部和中線中間
currentY = upPointY
}else if (currentY + transY < bottionY) && (currentY + transY > middleY){
currentY = bottionY
}else if currentY + transY < upPointY{
currentY = upPointY
}else{
currentY = bottionY
}
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 10, initialSpringVelocity: 5, options: [], animations: {
self.frame.origin.y = CGFloat(self.currentY)
}) { (complete) in
}
currentY = Double(self.frame.origin.y)
}
}
//待擴充套件tap
@objc func tapHandle(tap:UITapGestureRecognizer){
}
}
相關文章
- 高德地圖和google地圖適配地圖Go
- 高德地圖上展示終端資訊地圖
- 機器學習在高德地圖軌跡分類的探索和應用機器學習地圖
- 高德地圖app怎麼使用北斗地圖? 高德地圖設定北斗地圖的教程地圖APP
- Flutter整合高德定位和地圖功能Flutter地圖
- 58同城等同類網站將走向何方網站
- iOS啟動圖和開屏廣告圖,類似網易iOS
- 58財報圖解:2014年Q3 58同城淨利潤590萬美元 同比下滑30%圖解
- 高德地圖fragment 動態載入地圖 巢狀問題地圖Fragment巢狀
- 自定義View-27 仿58同城載入資料動畫View動畫
- 高德地圖導航和路徑規劃地圖
- 58同城招股書要點——資料資訊圖
- 高德地圖定位實現地圖
- CocoaPods 操作高德地圖地圖
- 高德地圖警告解決地圖
- 類似列表的view伸縮動畫View動畫
- 【Swift】類似於微博、微信的多圖瀏覽 檢視Swift
- android ---------高德地圖實現定位和3D地圖顯示Android地圖3D
- 資料看58同城
- 【高德地圖SDK】如何實現軌跡平滑移動?地圖
- 高德地圖之地圖的屬性地圖
- 【Swift】類似於微博、微信的ActionSheetSwift
- 仿百度地圖上拉下滑抽屜盒地圖
- 高德地圖開發彙總地圖
- 高德地圖--水波雷達動畫地圖動畫
- 【高德地圖API】從零開始學高德JS API(一)地圖展現——仙劍地圖,麻點圖,街景,室內圖地圖APIJS
- 58同城上租房疑遭詐騙 網站最高賠5000網站
- 高德地圖之地圖的生命週期地圖
- 高德地圖首席科學家任小楓:視覺智慧在高德地圖的應用地圖視覺
- 58同城財報圖解:2018年58同城淨利潤4.109億元 同比下降0.8%圖解
- 58同城財報圖解:2014年Q4 58同城營收8020萬美元 同比增77%圖解營收
- 58同城房產租售模組分析
- 【高德地圖API】如何製作自己的旅遊地圖?地圖API
- 58同城財報圖解:2019年Q4 58同城總收入5.957億美元 同比增長15.1%圖解
- java接入高德地圖常用WEB APIJava地圖WebAPI
- 高德地圖的四處進擊地圖
- 高德地圖JSAPI學習(一)地圖JSAPI
- 在Vue中使用高德地圖APIVue地圖API