12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142 |
- //
- // IHClassRoomView.swift
- // Inhealth
- //
- // Created by weclouds on 2020/6/12.
- // Copyright © 2020 weclouds. All rights reserved.
- //
- import UIKit
- protocol IHClassRoomViewDelegate : NSObjectProtocol{
- //调色温与亮度
- // func clickLight(_index : Int)
- func clickLight(lightDevice : ShoolDeviceList)
- //更换灯的位置
- func chargeLight(lists: [ShoolDeviceList])
- //窗帘的开关
- func curtainSetOnOff(curtainDevice : ShoolDeviceList,respone:@escaping ((_ msg : String)->Void))
- //色温 3000 - 6000 ,间隔是300
- func setClassLightColor(classDevices : [ShoolDeviceList])
-
- //所有灯的开关 -- 模式类型(1 全开模式,2 全关模式,3 投影模式,4 自习模式,5 板书模式)
- func lights_set_off(type : String)
-
-
- }
- class IHClassRoomView: UIView {
- //上课模型数组
- var classModelArr = [UIView]()
- var lightsArr = [UIView]()
- var blackboardLights = [UIView]()
- var allLightsBtn : UIButton?
- var cancelBtn : UIButton?
- var sureBtn : UIButton?
- private var classImage : UIImageView?
- var blackboardLine : UIImageView?
- private var line : UIImageView?
- var moveLight : UIView?
- var isLongTap : Bool = false
- var isBlackboardLongTap : Bool = false
- var clickImage : UIView?
- var beginPoint = CGPoint.init(x: 0, y: 0)
- var originalPoint = CGPoint.init(x: 0, y: 0)
- var isChangeLight : Bool = false
- var recordLights = [[UIView : CGPoint]]()
- weak var delegate : IHClassRoomViewDelegate?
- private var classLightArr = [ShoolDeviceList]()
- private var blackBoardLightArr = [ShoolDeviceList]()
- private var curtainArr = [ShoolDeviceList]()
-
- var selectBtnIndex : Int = 0
- //var oldSelectBtnIndex : Int = 0
- var isSuccess : Bool = false
- var isAllLightOpen : Bool = false
- var isSelect : Bool = false
- var blackBoardLightFrames : [(x : CGFloat,y :CGFloat,w : CGFloat,h : CGFloat)]? //黑板灯的位置
- var classRoomLightFrames : [(x : CGFloat,y :CGFloat,w : CGFloat,h : CGFloat)]? //教室灯的位置
-
- //数据 - 教室设备
- var shoolDivListArr : [ShoolDeviceList]? {
- didSet{
- if classImage == nil {
- createUI()
- }else{
- classModelArr.removeAll()
- lightsArr.removeAll()
- blackboardLights.removeAll()
- blackBoardLightFrames?.removeAll()
- classRoomLightFrames?.removeAll()
- allLightsBtn = nil
- cancelBtn = nil
- sureBtn = nil
- classImage = nil
- blackboardLine = nil
- line = nil
- moveLight = nil
- isLongTap = false
- isBlackboardLongTap = false
- clickImage = nil
- beginPoint = CGPoint.init(x: 0, y: 0)
- originalPoint = CGPoint.init(x: 0, y: 0)
- isChangeLight = false
- recordLights = [[UIView : CGPoint]]()
-
- self.removeSubviews()
- classLightArr.removeAll()
- blackBoardLightArr.removeAll()
- curtainArr.removeAll()
-
- createUI()
- }
-
- }
- }
-
- override init(frame: CGRect) {
- super.init(frame: frame)
- // createUI()
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- }
- extension IHClassRoomView{
- func createUI() {
-
-
- //设置大图片
- let backImageView = UIImageView.init(frame: self.bounds)
- backImageView.image = UIImage.init(named: "背景")
- self.addSubview(backImageView)
-
- //教室背景图片
- classImage = UIImageView.init()
- let percent = (21 * KSCREENWIDTH) / 750
- classImage!.frame = CGRect.init(x: percent, y: KNavBarHeight + 20, width: KSCREENWIDTH - 2 * percent, height: KSCREENHEIGHT - KNavBarHeight - 20)
- classImage!.image = UIImage.init(named: "教室背景")
- classImage!.isUserInteractionEnabled = true
- self.addSubview(classImage!)
-
- guard let deviceLists = self.shoolDivListArr else {return }
- for light in deviceLists {
- //设备类型(4 教室灯,5 黑板灯,6 窗帘)
- guard let type = light.type else { return}
- if type == "4" {
- classLightArr.append(light)
-
- }
- if type == "5" {
- blackBoardLightArr.append(light)
- }
- if type == "6" {
- curtainArr.append(light)
- }
- }
-
- //教室灯
- setClassLight(lights : classLightArr)
- //黑板灯
- setBlackBoardLightLocation(lights : blackBoardLightArr)
- // 窗帘
- setCurtain(curtains :curtainArr )
-
- //开关与色温
- setOnOffAndColTep()
- //上课模式
- setClassModelUI()
-
- }
-
-
- //设置上课模式
- func setClassModel(classModelView_super : UIView) {
- let offsetX = (40 * KSCREENWIDTH) / 750
- let width = (78 * KSCREENWIDTH) / 750
- let between = (classModelView_super.size.width - offsetX * 2 - width * 6) / 5
- let arr = ["上课","下课","午休","投影","自习","板书"]
- for i in (0..<6) {
- let backView = UIView.init(frame: CGRect.init(x: offsetX + CGFloat(i) * (width + between), y: 1, width: width, height: classModelView_super.size.height - 1))
- backView.tag = i + 1
- let line = UIView.init(frame: CGRect.init(x: 0, y: 0, width: width, height: 1))
- line.backgroundColor = UIColor.init(hexString: "#3E328B")
- let btn = UIButton.init(frame: CGRect.init(x: 0, y: 1, width: width, height: backView.size.height))
- //btn.setImage(UIImage.init(named: "勾选"), for: .normal)
- btn.titleLabel?.font = UIFont.systemFont(ofSize: 14)
- btn.setTitle(arr[i], for: .normal)
- btn.setTitleColor(.black, for: .normal)
- btn.isUserInteractionEnabled = false
- line.tag = tag + 1
- btn.tag = tag + 1
- backView.addSubview(line)
- backView.addSubview(btn)
- let tapGR = UITapGestureRecognizer.init(target: self, action: #selector(changeClassModel))
- backView.addGestureRecognizer(tapGR)
- classModelView_super.addSubview(backView)
-
- line.backgroundColor = .white
- //btn.setImage(UIImage.init(named: ""), for: .normal)
- if selectBtnIndex != 0 {
- if i + 1 == selectBtnIndex {
- line.backgroundColor = UIColor.init(hexString: "#3E328B")
- btn.setImage(UIImage.init(named: "勾选"), for: .normal)
- }
- }
- btn.setTitleColor(UIColor.init(hexString: "#657085"), for: .normal)
-
- classModelArr.append(backView)
- }
-
- }
-
- //面板灯
- func setLightUI(light : ShoolDeviceList,offsetX : CGFloat,offsetY : CGFloat,backW : CGFloat,backH: CGFloat, lightW: CGFloat,lightH: CGFloat,light_superView: UIView){
-
- guard let location = light.location else {
- return
- }
- guard let locationValue = Int(location) else{return}
- let row : Int = (locationValue - 1) % 3
- let col : Int = (locationValue - 1) / 3
- let marginX = offsetX + CGFloat(row) * backW
- let marginY = offsetY + CGFloat(col) * backH
- //let X = String.init(format: "%.3f",marginX).cgFloat()
-
- let backLightView = UIView.init(frame: CGRect.init(x: Double(marginX), y: Double(marginY), width: Double(backW), height: Double(backH)))
-
- // let backLightView = UIView(frame: CGRect.init(x: marginX, y: marginY, width: backW, height: backH))
-
- //灯
-
- let x = (backW - lightW) * 0.5
- let lightImageView = UIImageView.init(frame: CGRect.init(x: x, y: 0, width: lightW, height: lightH))
- guard let status = light.status else {
- return
- }
- if status == "0" {
- lightImageView.image = UIImage.init(named: "大灯_暗")
- }else{
- lightImageView.image = UIImage.init(named: "大灯_亮")
- }
-
-
- lightImageView.isUserInteractionEnabled = true
- backLightView.tag = locationValue
- lightImageView.tag = locationValue
- //标签
- let lightLabel = UILabel.init(frame: CGRect.init(x: 0, y: lightH - 20, width: backW, height: backH - lightH + 10))
-
- lightLabel.text = light.name
- lightLabel.textAlignment = .center
- lightLabel.textColor = .white
- lightLabel.font = UIFont.systemFont(ofSize: 12)
- lightLabel.isHidden = true
- self.clickImage = backLightView
- //手势
- let tapGR = UITapGestureRecognizer.init(target: self, action: #selector(tapImage))
- let longGR = UILongPressGestureRecognizer.init(target: self, action: #selector(longTapImage))
- // backLightView.addGestureRecognizer(tapGR)
- // backLightView.addGestureRecognizer(longGR)
-
- lightImageView.addGestureRecognizer(tapGR)
- lightImageView.addGestureRecognizer(longGR)
-
- // light_superView.isUserInteractionEnabled = true
- backLightView.addSubview(lightImageView)
- backLightView.addSubview(lightLabel)
- light_superView.addSubview(backLightView)
- lightsArr.append(backLightView)
- }
-
- //设置窗帘
- func setCurtainUI(curtain : ShoolDeviceList, curtain_superView : UIView) {
- //
- guard let location = curtain.location else {
- return
- }
- let curtain_offsetY = ((134 + 290) * KSCREENHEIGHT) / 1623
- var offsetY : CGFloat = 0
- if location == "2" {
- offsetY = curtain_offsetY
- }
- let curtainH = (290 * KSCREENHEIGHT) / 1623
- let curtainBtn = UIButton.init(frame: CGRect.init(x: 0, y: offsetY, width: 30, height: curtainH))
- guard let status = curtain.status else {
- return
- }
- if status == "1" {
- //开
- curtainBtn.setImage(UIImage.init(named: "窗帘打开"), for: .normal)
- }else{
- //关
- curtainBtn.setImage(UIImage.init(named: "窗帘关闭"), for: .normal)
- }
- guard let tag : Int = Int(location) else {
- return
- }
- curtainBtn.tag = tag
- curtainBtn.addTarget(self, action: #selector(switchCurtain), for: .touchUpInside)
-
- curtain_superView.addSubview(curtainBtn)
- }
- }
- extension IHClassRoomView{
-
- //黑板灯-点击
- @objc func blackboardTapImage(tapGR : UIGestureRecognizer){
- let imageV = tapGR.view!
- log.debug("黑板-开关\(imageV.tag)")
- //教室灯长按之后,这里不允许进来
- if isLongTap == true {
- return
- }
- guard let delegate = self.delegate else{
- return
- }
- for light in blackBoardLightArr {
- guard let location = light.location else {
- return
- }
- if location == String.init(format: "%d", imageV.tag){
- delegate.clickLight(lightDevice: light)
- break
- }
- }
-
-
- //更改
- // delegate.clickLight(_index: imageV.tag)
- }
- //黑板灯-长按
- @objc func blackboardTLongTapImage(longTapGR : UIGestureRecognizer){
- log.debug("长按灯了")
-
- if longTapGR.state == .began {
- for lightV in blackboardLights {
- lightV.isUserInteractionEnabled = false
- let dic = [lightV : lightV.frame.origin]
- recordLights.append(dic)
-
- for label in lightV.subviews {
- if label.isKind(of: UILabel.self) {
- label.isHidden = false
- }
- }
- }
- setLightRotation(lights: blackboardLights)
- isBlackboardLongTap = true
-
- //在黑板上盖一个
- guard let coverView = line else {
- return
- }
- let blackview = UIView.init(frame: coverView.frame)
- blackview.tag = 100
- blackview.backgroundColor = .clear
- classImage?.addSubview(blackview)
- }
- }
- //窗帘开关
- @objc func switchCurtain(btn: UIButton){
- log.debug("窗帘开关\(btn.tag)")
- // btn.isSelected = !btn.isSelected
- if isBlackboardLongTap == true || isLongTap == true{
- return
- }
-
- guard let delegate = delegate else {
- return
- }
-
- for curtain in curtainArr {
- guard let location = curtain.location else {
- return
- }
- if location == String.init(format: "%d", btn.tag){
- delegate.curtainSetOnOff(curtainDevice: curtain, respone: { msg in
- if msg == "successful operation"{
- //重新加载新的数据
-
- }
- })
- }
- }
-
-
- }
- //面板灯开关
- @objc func tapImage(tapGR : UIGestureRecognizer){
- let imageV = tapGR.view!
- log.debug("面板灯-开关\(imageV.tag)")
- //黑板在移动里时,这里不允许点击
- if isBlackboardLongTap == true {
- return
- }
-
- guard let delegate = self.delegate else{
- return
- }
-
- for light in classLightArr {
- guard let location = light.location else {
- return
- }
- if location == String.init(format: "%d", imageV.tag){
- delegate.clickLight(lightDevice: light)
- break
- }
- }
- // delegate.clickLight(_index: imageV.tag)
- }
- //面板灯长按
- @objc func longTapImage(longGR : UIGestureRecognizer){
-
- if longGR.state == .began {
-
- for lightV in lightsArr {
- lightV.isUserInteractionEnabled = false
- let dic = [lightV : lightV.frame.origin]
- recordLights.append(dic)
-
- for label in lightV.subviews {
- if label.isKind(of: UILabel.self) {
- label.isHidden = false
- }
- }
- }
- setLightRotation(lights: lightsArr)
- isLongTap = true
-
- //在黑板上盖一个
- guard let coverView = blackboardLine else {
- return
- }
- let blackview = UIView.init(frame: coverView.frame)
- blackview.tag = 100
- blackview.backgroundColor = .clear
- classImage?.addSubview(blackview)
-
- }
- }
-
- //设置抖动
- func setLightRotation(lights : [UIView]) {
- let anim = CAKeyframeAnimation.init()
- anim.keyPath = "transform.rotation"
- //弧度转角度
- let s = 4 / 180.0 * Double.pi
- // anim.values = [-s,0,s,0,-s,0,s,0]
- anim.values = [-s,s,-s]
- anim.repeatCount = MAXFLOAT
- anim.duration = 0.2
- for lightView in lights {
- let views = lightView.subviews
- for subV in views {
- if subV.isKind(of: UIImageView.self) && subV.tag > 0 {
- subV.isUserInteractionEnabled = false
- subV.layer.add(anim, forKey: nil)
- }
- }
-
- }
- //隐藏-开关
- allLightsBtn?.isHidden = true
- classModelArr[0].superview?.isHidden = true
-
- //显示--选中与取消 -- 注意
- if blackboardLine != nil {
- blackboardLine!.isHidden = false
- }
- if line != nil{
- line!.isHidden = false
- }
-
- cancelBtn?.isHidden = false
- sureBtn?.isHidden = false
-
- }
-
- //色温
- @objc func changeColorTemp(tapGR : UIGestureRecognizer){
- log.debug("色温")
-
- guard let delegate = delegate else {
- return
- }
- //教室灯循环请求,全部返回后再点击发命令
- delegate.setClassLightColor(classDevices: classLightArr)
-
- }
-
- //所有灯的开关
- @objc func switchAll(btn : UIButton){
- log.debug("所有灯的开关")
- btn.isSelected = !btn.isSelected
-
- //先要判断灯的状态
- guard let delegate = delegate else {
- return
- }
- //灯的全开/全关
- isSelect = !isSelect
- if isSelect == true {
- delegate.lights_set_off(type: "1")
- }else{
- delegate.lights_set_off(type: "2")
- }
-
- }
-
- func setLightModel(blackboardLight : UIView, lightName : String) {
- for imageV in blackboardLight.subviews {
- if imageV.isKind(of: UIImageView.self) && imageV.tag > 0{
- // imageV.isHighlighted = true
- let imageV = imageV as! UIImageView
- imageV.image = UIImage.init(named: lightName)
- }
- }
- }
-
- //改变上课模式
- @objc func changeClassModel(tapGR : UIGestureRecognizer){
- let view = tapGR.view!
- log.debug("模式:\(view.tag)")
- UIView.animate(withDuration: 0.3) {
- for subView in self.classModelArr {
- if view.tag == subView.tag {
- for v in subView.subviews {
- if(v.tag > 0){
- if v.isMember(of: UIButton.self) {
- let btn :UIButton = v as! UIButton
- btn.setImage(UIImage.init(named: "勾选"), for: .normal)
- btn.setTitleColor(.black, for: .normal)
- }else{
- v.backgroundColor = UIColor.init(hexString: "#3E328B")
- }
- }
- }
- }else if subView.tag > 0 && view.tag != subView.tag {
- for v in subView.subviews {
- if(v.tag > 0){
- if v.isMember(of: UIButton.self) {
- let btn :UIButton = v as! UIButton
- //btn.setImage(UIImage.init(named: ""), for: .normal)
- btn.setTitleColor(UIColor.init(hexString: "#657085"), for: .normal)
- }else{
- v.backgroundColor = .white
- }
- }
- }
- }
- }
- }
-
- guard let delegate = delegate else {
- return
- }
- // 模式类型(1 全开模式,2 全关模式,3 投影模式,4 自习模式,5 板书模式,7 上课模式,8 下课模式,9 午休模式)
- //1-7 2-8 3-9 4-3 5-4 6-5
- var type = "1"
- if view.tag == 1 {
- type = "7"
- }
- if view.tag == 2 {
- type = "8"
- }
- if view.tag == 3 {
- type = "9"
- }
- if view.tag == 4 {
- type = "3"
- }
- if view.tag == 5 {
- type = "4"
- }
- if view.tag == 6 {
- type = "5"
- }
- selectBtnIndex = view.tag
- delegate.lights_set_off(type: type)
- }
-
-
- @objc func cancelChooseClass(btn: UIButton){
- //取消选中教室 - 面板灯又回到原来的位置
- if isLongTap == true{
- var arr = [UIView]()
- for dic in recordLights {
- let key = dic.keys.first
- let value = dic.values.first
- key!.frame.origin = value!
- arr.append(key!)
- }
- lightsArr = arr
-
- //取消黑板灯的蒙板
- let coverView = classImage?.viewWithTag(100)
- coverView?.removeFromSuperview()
- }
-
- if isBlackboardLongTap == true {
- var arr = [UIView]()
- for dic in recordLights {
- let key = dic.keys.first
- let value = dic.values.first
- key!.frame.origin = value!
- arr.append(key!)
- }
- blackboardLights = arr
- //取消教室灯的蒙板
- let coverView = classImage?.viewWithTag(100)
- coverView?.removeFromSuperview()
- }
- setBottomState()
- }
-
- @objc func chooseClass(btn: UIButton){
- guard let delegate = delegate else { return }
- //更换 -- 灯的位置
-
- var lights = [ShoolDeviceList]()
- if isBlackboardLongTap == true {
- //黑板灯
- // originBlackBoardTagArr
- //原来的位置与改变后的位置相比
- for (idx,changeLocation) in blackboardLights.enumerated() {
-
- var light = blackBoardLightArr[idx]
- guard let loc = light.location else {
- return
- }
- guard let locValue = Int(loc) else {
- return
- }
- if changeLocation.tag != locValue{
- light.location = String.init(format: "%d", changeLocation.tag)
- lights.append(light)
- }
-
- }
- }
- if isLongTap == true {
- //教室灯
- //原来的位置与改变后的位置相比
- for (idx,changeLocation) in lightsArr.enumerated() {
-
- var light = classLightArr[idx]
- guard let loc = light.location else {
- return
- }
- guard let locValue = Int(loc) else {
- return
- }
- // if changeLocation.tag == locValue{
- // return
- // }
- if changeLocation.tag != locValue{
- light.location = String.init(format: "%d", changeLocation.tag)
- lights.append(light)
- }
-
- }
-
- }
-
- delegate.chargeLight(lists: lights)
- //选中教室
- setBottomState()
- }
-
- func setBottomState(){
- //取消教室灯的蒙板
- let coverView = classImage?.viewWithTag(100)
- coverView?.removeFromSuperview()
- if(isLongTap == true){
- for lightV in lightsArr {
- lightV.isUserInteractionEnabled = true
- for imageView in lightV.subviews {
- if imageView.isKind(of: UIImageView.self) && imageView.tag > 0 {
- imageView.isUserInteractionEnabled = true
- imageView.layer.removeAllAnimations()
- }
- if imageView.isKind(of: UILabel.self) {
- imageView.isHidden = true
- }
- }
-
- }
- }
- if(isBlackboardLongTap == true){
- for lightV in blackboardLights {
- lightV.isUserInteractionEnabled = true
- for imageView in lightV.subviews {
- if imageView.isKind(of: UIImageView.self) && imageView.tag > 0 {
- imageView.isUserInteractionEnabled = true
- imageView.layer.removeAllAnimations()
- }
- if imageView.isKind(of: UILabel.self) {
- imageView.isHidden = true
- }
-
- }
- }
- }
-
- // --- 注意
- if blackboardLine != nil {
- blackboardLine!.isHidden = true
- }
- if line != nil {
- line!.isHidden = true
- }
-
- cancelBtn?.isHidden = true
- sureBtn?.isHidden = true
- allLightsBtn?.isHidden = false
- classModelArr[0].superview?.isHidden = false
- isLongTap = false
- isBlackboardLongTap = false
- }
- }
- //上课模式
- extension IHClassRoomView{
- func setClassModelUI() {
- //上课模式
- let classY = (1321 * KSCREENHEIGHT) / 1623
- let classH = (82 * KSCREENHEIGHT) / 1623
- let classModelView = UIView.init(frame: CGRect.init(x: 0, y: classY, width: classImage!.size.width, height: classH))
- classModelView.backgroundColor = .white
- classModelView.cornerRadius = 8
- classModelView.layer.masksToBounds = true
- classImage!.addSubview(classModelView)
-
- setClassModel(classModelView_super: classModelView)
-
- //选中界面下的 x和v
- let btnX = (254 * KSCREENWIDTH) / 750
- let btnY = (1311 * KSCREENHEIGHT) / 1623
- let btnWH = (60 * KSCREENWIDTH) / 750
-
- cancelBtn = UIButton.init(frame: CGRect.init(x: btnX, y: btnY, width: btnWH, height: btnWH))
- cancelBtn?.setImage(UIImage.init(named: "取消"), for: .normal)
- cancelBtn?.backgroundColor = UIColor.init(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 0.7)
- cancelBtn?.addTarget(self, action: #selector(cancelChooseClass), for: .touchUpInside)
- cancelBtn?.cornerRadius = btnWH / 2
- cancelBtn?.layer.masksToBounds = true
- cancelBtn?.isHidden = true
- classImage!.addSubview(cancelBtn!)
-
- let sbtnX = (394 * KSCREENWIDTH) / 750
- sureBtn = UIButton.init(frame: CGRect.init(x: sbtnX, y: btnY, width: btnWH, height: btnWH))
- sureBtn?.setImage(UIImage.init(named: "确认"), for: .normal)
- sureBtn?.backgroundColor = UIColor.init(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 0.7)
- sureBtn?.addTarget(self, action: #selector(chooseClass), for: .touchUpInside)
- sureBtn?.isHidden = true
- sureBtn?.cornerRadius = btnWH / 2
- sureBtn?.layer.masksToBounds = true
- classImage!.addSubview(sureBtn!)
- }
- }
- //开关与色温
- extension IHClassRoomView{
- func setOnOffAndColTep() {
- //所有灯的开关
- let lightsX = (19 * KSCREENWIDTH) / 750
- let lightsY = (1221 * KSCREENHEIGHT) / 1623
- let lightsW = (70 * KSCREENWIDTH) / 750
- allLightsBtn = UIButton.init(frame: CGRect.init(x: lightsX, y: lightsY, width: lightsW, height: lightsW))
-
- allLightsBtn?.isSelected = isSelect
- if isSelect == false{
- allLightsBtn?.setBackgroundImage(UIImage.init(named: "全关"), for: .normal)
- allLightsBtn?.setBackgroundImage(UIImage.init(named: "全开"), for: .selected)
- }else{
- allLightsBtn?.setBackgroundImage(UIImage.init(named: "全开"), for: .normal)
- allLightsBtn?.setBackgroundImage(UIImage.init(named: "全关"), for: .selected)
- }
-
-
- allLightsBtn?.addTarget(self, action: #selector(switchAll), for: .touchUpInside)
- classImage!.addSubview(allLightsBtn!)
-
- //色温开关
- let tempX = (619 * KSCREENWIDTH) / 750
-
- let tempImageV = UIImageView.init(frame: CGRect.init(x: tempX, y: lightsY, width: lightsW, height: lightsW))
- tempImageV.image = UIImage.init(named: "色温_开关")
- let tapGR = UITapGestureRecognizer.init(target: self, action: #selector(changeColorTemp))
- tempImageV.addGestureRecognizer(tapGR)
- tempImageV.isUserInteractionEnabled = true
- //暂时取消
- //classImage.addSubview(tempImageV)
- }
- }
- //教室灯
- extension IHClassRoomView{
- func setClassLight(lights : [ShoolDeviceList]){
- if lights.count == 0 {
- return
- }
- //面板灯的网格线
- let lineX = (49 * KSCREENWIDTH) / 750
- let lineY = (222 * KSCREENHEIGHT) / 1623
- let lineH = (1029 * KSCREENHEIGHT) / 1623
- line = UIImageView.init(frame: CGRect.init(x: lineX, y: lineY, width: classImage!.size.width - 2 * lineX, height: lineH))
- line!.image = UIImage.init(named: "3-3网格")
- line!.isHidden = true
- classImage!.addSubview(line!)
-
-
- //面板灯222
- let offsetY = (202 * KSCREENHEIGHT) / 1623
- let offsetX = (49 * KSCREENWIDTH) / 750
- let backW = ((708 - 49 * 2) / 3 * KSCREENWIDTH) / 750
- let backH = ((1029 * KSCREENHEIGHT) / 1623) / 3
- let lightW : CGFloat = (120 * KSCREENWIDTH) / 750
- let lightH = (306 * KSCREENHEIGHT) / 1623
- //计算所有按键的位置
- setAllClassRoomLightFrame(offsetX: offsetX, offsetY: offsetY, backW: backW, backH: backH)
-
- for light in lights {
-
- setLightUI(light : light,offsetX : offsetX, offsetY : offsetY, backW : backW,backH: backH, lightW: lightW,lightH: lightH,light_superView: classImage!)
- }
- }
- }
- //计算所有的灯的位置
- extension IHClassRoomView {
- //设置教室灯的位置
- private func setAllClassRoomLightFrame (offsetX : CGFloat, offsetY : CGFloat, backW : CGFloat,backH: CGFloat){
- var frames = [(x:CGFloat,y:CGFloat,w:CGFloat,h:CGFloat)]()
- for i in 0..<9 {
- let row : Int = i % 3
- let col : Int = i / 3
- let marginX = offsetX + CGFloat(row) * backW
- let marginY = offsetY + CGFloat(col) * backH
- let X = String.init(format: "%.3f", marginX).cgFloat()
- frames.append((x: X!, y: marginY, w: backW, h: backH))
- }
- classRoomLightFrames = frames
- }
-
- private func setBlackBoardLightFrames(width: CGFloat,height : CGFloat) {
- var frames = [(x:CGFloat,y:CGFloat,w:CGFloat,h:CGFloat)]()
- for i in 0..<3 {
- var offsetX : CGFloat = 102
- offsetX = offsetX + width * CGFloat(i)
- let light_percent = (offsetX * KSCREENWIDTH) / 750
- let width = (width * KSCREENWIDTH) / 750
- let X = String.init(format: "%.3f", light_percent).cgFloat()
- frames.append((x : X!, y: 0, w : width, h : height))
-
- }
- blackBoardLightFrames = frames
- }
- }
- //窗帘
- extension IHClassRoomView{
- func setCurtain(curtains : [ShoolDeviceList]) {
-
- if curtains.count > 0 {
- //窗帘 360
- let curtain_percent = (360 * KSCREENHEIGHT) / 1623
- let height = ((290 * 2 + 134) * KSCREENHEIGHT) / 1623
- let curtainView = UIView.init(frame: CGRect.init(x: 0, y: curtain_percent, width: 44, height: height))
- curtainView.backgroundColor = .clear
- classImage!.addSubview(curtainView)
- for curtain in curtains {
- setCurtainUI(curtain : curtain, curtain_superView: curtainView)
- }
- }
- }
- }
- //黑板灯
- extension IHClassRoomView {
- func setBlackBoardLightLocation(lights : [ShoolDeviceList]) {
- if lights.count == 0 {
- return
- }
- //黑板灯的网格线
- let blackboardLineX = (102 * KSCREENWIDTH) / 750
- let blackboardLineH = (136 * KSCREENHEIGHT) / 1623
- blackboardLine = UIImageView.init(frame: CGRect.init(x: blackboardLineX, y: 0, width: classImage!.size.width - 2 * blackboardLineX, height: blackboardLineH))
- blackboardLine!.image = UIImage.init(named: "1-3网格")
- blackboardLine!.isHidden = true
- classImage!.addSubview(blackboardLine!)
- let w : CGFloat = (708 - 102 * 2) / 3
-
- //计算所有的黑板灯的位置
- setBlackBoardLightFrames(width: w,height : blackboardLineH)
-
- for light in lights {
-
- //改
- setBlackBoardLight(light : light,width: w,height : blackboardLineH,blackBoardLight_superView: classImage!)
- }
- }
-
-
- //设置黑板灯
- func setBlackBoardLight(light : ShoolDeviceList,width: CGFloat,height : CGFloat, blackBoardLight_superView : UIView) {
- guard let location = light.location else {
- return
- }
- var offsetX : CGFloat = 102
- if location == "2" {
- offsetX = offsetX + width
- }
- if location == "3" {
- offsetX = offsetX + width * 2
- }
- let light_percent = (offsetX * KSCREENWIDTH) / 750
- let width = (width * KSCREENWIDTH) / 750
- //let blackboardView = UIView.init(frame: CGRect.init(x: light_percent, y: 0, width: width, height: height))
- let X = String.init(format: "%.3f",light_percent).cgFloat()
- let blackboardView = UIView.init(frame: CGRect.init(x: X!, y: 0, width: width, height: height))
-
- //灯
- guard let status = light.status else {
- return
- }
- let blackboard_light = UIImageView.init()
- if status == "0" {
- blackboard_light.image = UIImage.init(named: "黑板灯_暗")
- }else{
- blackboard_light.image = UIImage.init(named: "黑板灯_亮")
- }
-
- blackboard_light.sizeToFit()
- blackboard_light.frame.origin = CGPoint.init(x: (blackboardView.frame.size.width - blackboard_light.frame.size.width) * 0.5, y: -10)
- guard let tag = Int(location) else {
- return
- }
- blackboardView.tag = tag
- blackboard_light.tag = tag
- //标签
- let blackboardLabel = UILabel.init(frame: CGRect.init(x: 0, y: 30, width: width, height: 34))
- // guard let deviceId = light.id else {
- // return
- // }
- // blackboardLabel.text = deviceId
- blackboardLabel.text = light.name
- blackboardLabel.textColor = .white
- blackboardLabel.font = UIFont.systemFont(ofSize: 12)
- blackboardLabel.textAlignment = .center
- blackboardLabel.isHidden = true
- blackboardView.addSubview(blackboard_light)
- blackboardView.addSubview(blackboardLabel)
- blackBoardLight_superView.addSubview(blackboardView)
-
- //手势
- let tapGR = UITapGestureRecognizer.init(target: self, action: #selector(blackboardTapImage))
- let longGR = UILongPressGestureRecognizer.init(target: self, action: #selector(blackboardTLongTapImage))
- blackboardView.addGestureRecognizer(tapGR)
- blackboardView.addGestureRecognizer(longGR)
- self.clickImage = blackboardView
- blackboardLights.append(blackboardView)
- }
- }
- extension IHClassRoomView {
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
- //长按之后
- if isLongTap == true {
- lightTouch(touches: touches, lights: lightsArr)
- }
- if isBlackboardLongTap == true {
- lightTouch(touches: touches, lights: blackboardLights)
- }
- }
- override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
- if !beginPoint.equalTo(CGPoint.init(x: 0, y: 0)) {
- if isLongTap == true{
- lightMove(touches: touches)
- }
- if isBlackboardLongTap == true {
- lightMove(touches: touches)
- }
- }
-
- }
- override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
- log.debug("结束--")
- if !beginPoint.equalTo(CGPoint.init(x: 0, y: 0)){
- if isLongTap == true{
- lightEnd(touches: touches, lights: lightsArr)
- }
- if isBlackboardLongTap == true {
- lightEnd(touches: touches, lights: blackboardLights)
- }
- }
-
- }
-
- //面板灯的 - 点击
- func lightTouch(touches: Set<UITouch>,lights : [UIView]){
-
- //遍历所有的面板灯的坐标
- for touch:AnyObject in touches {
- let touche : UITouch = touch as! UITouch
- let point = touche.location(in: classImage)
- for lightView in lights {
- let bool = lightView.frame.contains(point)
- if bool == true {
- classImage!.bringSubviewToFront(lightView)
- beginPoint = point
- moveLight = lightView
- originalPoint = lightView.frame.origin
-
- }
- }
- }
-
- }
-
- //面板灯 - 移动
- func lightMove(touches: Set<UITouch>) {
- for touch:AnyObject in touches {
- let touche : UITouch = touch as! UITouch
- let point = touche.location(in: classImage)
- let x = point.x - beginPoint.x
- let y = point.y - beginPoint.y
- guard let moveLight = moveLight else {
- return
- }
- moveLight.center.x = moveLight.center.x + x
- moveLight.center.y = moveLight.center.y + y
- beginPoint = point
- }
-
- }
- //灯 - 停止
- func lightEnd(touches: Set<UITouch>,lights : [UIView]) {
-
- for touch:AnyObject in touches {
- let touche : UITouch = touch as! UITouch
- let endPoint = touche.location(in: classImage)
-
- //1.先遍历点是否包含在frame的数组中
- //2.1. 如果移动的终点是没有灯的,就直接修改该灯的位置
- //2.2. 如果移动的终点是有灯的,就与此灯交换位置
- var isContain = false
- var contained = false
- var lightFrames = [(x : CGFloat,y :CGFloat,w : CGFloat,h : CGFloat)]()
- if isLongTap == true {
- lightFrames = self.classRoomLightFrames!
- }
- if isBlackboardLongTap == true {
- lightFrames = self.blackBoardLightFrames!
- }
- for (index,frameTupe) in lightFrames.enumerated() {
-
- let frame = CGRect.init(x: frameTupe.x, y: frameTupe.y, width: frameTupe.w, height: frameTupe.h)
-
- isContain = frame.contains(endPoint)
- let frameX = String.init(format: "%.3f", frame.origin.x)
- let frameY = String.init(format: "%.3f", frame.origin.y)
- //再看是否有可以交换的灯
- if isContain == true{
- contained = isContain
- var ischange = 0
- for light in lights {
- //&& light.frame != moveLight!.frame
- let lightFrameX = String.init(format: "%.3f", light.frame.origin.x)
- let lightFrameY = String.init(format: "%.3f", light.frame.origin.y)
- //创建view精度会改变,所以把origin取二位做比较
- if frameX == lightFrameX && frameY == lightFrameY {
- //有交换的灯,但不能交换自己
- log.debug("有交换的\(frame),\(light.frame)")
- ischange = 1
- light.frame.origin = originalPoint
- light.tag = moveLight!.tag
- moveLight!.frame = frame
- moveLight!.tag = index + 1
-
- beginPoint = CGPoint.init(x: 0, y: 0)
-
- break
- }
- }
-
- if ischange == 0 {
- //没有交换的,直接修改位置
- log.debug("直接修改位置\(frame)")
- moveLight?.tag = index + 1
- moveLight?.frame = frame
- beginPoint = CGPoint.init(x: 0, y: 0)
- break
- }
- }
-
- }
-
- if isContain == false && contained == false{
- //结束点是否在 这些
- log.debug("不在classRoomFrame范围内\(frame)")
- moveLight?.frame.origin = originalPoint
- beginPoint = CGPoint.init(x: 0, y: 0)
- break
- }
-
-
-
-
-
- // for lightView in lights{
- // let bool = lightView.frame.contains(endPoint)
- // log.debug("包含:\(bool),\(lightView)" )
- // if bool == true {
- //
- // if lightView.isEqual(moveLight) {
- // //2.如果不挡住就回原来的位置
- // lightView.frame.origin = originalPoint
- // beginPoint = CGPoint.init(x: 0, y: 0)
- // }else{
- //
- // //1.如果挡住就置换
- // let end = lightView.frame.origin
- // lightView.frame.origin = originalPoint
- // moveLight?.frame.origin = end
- //
- // //更换location
- // let location = lightView.tag
- // guard let moveLight = moveLight else {
- // return
- // }
- // lightView.tag = moveLight.tag
- // moveLight.tag = location
- // beginPoint = CGPoint.init(x: 0, y: 0)
- //
- // break
- // }
- // }
- // }
- }
-
- }
- }
|