iOS開(kāi)發(fā) 自定義拖動(dòng)視圖

Simulator Screen Shot 2016年3月23日 上午11.02.35.png
DragSquaresView.gif
DragSquaresView.swift
import UIKit

class DragSquaresView: UIView {

    let itemArray = NSMutableArray()
    var contain:Bool!
    var startPoint: CGPoint!
    var originPoint: CGPoint!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        createdView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
   func createdView() {
    
    let W = UIScreen.mainScreen().bounds.width //屏幕寬度
    _ = UIScreen.mainScreen().bounds.height //屏幕高度
    
    let allView = 40 // 全部視圖個(gè)數(shù)
    
    let mainViewW:CGFloat = W/4   //視圖寬度
    let mainViewH:CGFloat = W/4 //視圖高度
    let totalloc = 4 //列數(shù)
    
    let margin = (W - mainViewW * CGFloat(totalloc))/5 //邊緣
    
    for i in 0..<allView {
        
        let loc = i%totalloc //列數(shù)
        let row = i/totalloc //行數(shù)(1/3=0,2/3=0,3/3=1)
        
        let viewX = margin + (margin + mainViewW) * CGFloat(loc)
        let viewY = margin + (margin + mainViewH) * CGFloat(row)
        
        //創(chuàng)建視圖
        let btn = UIButton(frame: CGRect(x: viewX, y: viewY+20, width: mainViewW, height: mainViewH))
        btn.tag = i
        btn.titleLabel?.font = UIFont.systemFontOfSize(20)
        btn.backgroundColor = randonColor()
        btn.setTitle("\(i+1)", forState: .Normal)
        self.addSubview(btn)
        
        let longGesture = UILongPressGestureRecognizer(target: self, action: "buttonLongPressed:")
        btn.addGestureRecognizer(longGesture) //創(chuàng)建手勢(shì)
        itemArray.addObject(btn)
        }
    }
    
    // 手勢(shì)方法
    func buttonLongPressed(sender: UILongPressGestureRecognizer) {
        
        let btn = sender.view as! UIButton
        switch sender.state {
        case .Began:
            startPoint = sender.locationInView(sender.view)
            originPoint = btn.center
            
            UIView.animateWithDuration(0.2, animations: { () -> Void in
                btn.transform = CGAffineTransformMakeScale(1.1, 1.1)
                btn.alpha = 0.7
            })
        case .Changed:
            let newPoint = sender.locationInView(sender.view)
            let deltaX = newPoint.x - startPoint.x
            let deltaY = newPoint.y - startPoint.y
            btn.center = CGPoint(x: btn.center.x + deltaX, y: btn.center.y + deltaY)
            let index = indexOfPoint(btn.center, withButton: btn)
            if index < 0 {
                contain = false
            } else {
                
                UIView.animateWithDuration(0.2, animations: { () -> Void in
                    var temp = CGPointZero
                    let button = self.itemArray[index] as! UIButton
                    temp = button.center
                    button.center = self.originPoint
                    btn.center = temp
                    self.originPoint = btn.center
                    self.contain = true
                })
            }
        case .Ended:
            
            UIView.animateWithDuration(0.2, animations: { () -> Void in
                btn.transform = CGAffineTransformIdentity
                btn.alpha = 1.0
                if self.contain != nil {
                    btn.center = self.originPoint
                }
            })
        default:
            break
        }
    }
    
    func indexOfPoint(point: CGPoint, withButton btn: UIButton) -> Int {
        for i in 0..<itemArray.count {
            let button = itemArray[i] as! UIButton
            if button != btn {
                if CGRectContainsPoint(button.frame, point) {
                    return i
                }
            }
        }
        return -1
    }
    
    //隨機(jī)顏色
    func randonColor() -> UIColor {
        
        let randomR:CGFloat = CGFloat(drand48())
        let randomG:CGFloat = CGFloat(drand48())
        let randomB:CGFloat = CGFloat(drand48())
        return UIColor(red: randomR, green: randomG, blue: randomB, alpha: 1.0)
    }
}

ViewController.swift
import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()

        //使用
        let dragView = DragSquaresView(frame: self.view.frame)
        self.view.addSubview(dragView)
    }  
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子施逾,更是在濱河造成了極大的恐慌,老刑警劉巖项玛,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妙色,死亡現(xiàn)場(chǎng)離奇詭異拌夏,居然都是意外死亡推穷,警方通過(guò)查閱死者的電腦和手機(jī)心包,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)馒铃,“玉大人蟹腾,你說(shuō)我怎么就攤上這事∏睿” “怎么了娃殖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)议谷。 經(jīng)常有香客問(wèn)我炉爆,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任芬首,我火速辦了婚禮鲫凶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衩辟。我一直安慰自己,他們只是感情好波附,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布艺晴。 她就那樣靜靜地躺著,像睡著了一般掸屡。 火紅的嫁衣襯著肌膚如雪封寞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天仅财,我揣著相機(jī)與錄音狈究,去河邊找鬼。 笑死盏求,一個(gè)胖子當(dāng)著我的面吹牛抖锥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碎罚,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼磅废,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了荆烈?” 一聲冷哼從身側(cè)響起拯勉,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憔购,沒(méi)想到半個(gè)月后宫峦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玫鸟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年导绷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屎飘。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诵次,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枚碗,到底是詐尸還是另有隱情逾一,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布肮雨,位于F島的核電站遵堵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陌宿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一锡足、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壳坪,春花似錦舶得、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝎亚,卻和暖如春九孩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背发框。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工躺彬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梅惯。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓宪拥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铣减。 傳聞我的和親對(duì)象是個(gè)殘疾皇子江解,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 青蟓和尸體面對(duì)面被吊在一起,他不斷扭動(dòng)著身子徙歼,好讓自己的臉別和那尸體靠的太近犁河,可每次他剛轉(zhuǎn)過(guò)一點(diǎn),繩子的扭力又將他...
    葛弗閱讀 341評(píng)論 0 0
  • 你站在炎夏。一直拒絕 把身后的劍舉出來(lái) 此刻你彎下身子 試圖擠出更多的水 你不敢回頭酿秸∶鹣瑁花朵不曾凋謝 而你亦不曾穿上...
    錦鈺閱讀 180評(píng)論 0 0
  • 我知道你討厭太近的關(guān)系稀蟋,碰巧我也沒(méi)有信心花時(shí)間去維持一段友情煌张。 今天和舍友討論想找個(gè)什么樣的男朋友,小敏說(shuō)想要一個(gè)...
    了兮兮閱讀 236評(píng)論 0 0
  • 林羽諾——單翼angel 我叫林羽諾退客,從我剛一出生的那一刻起骏融,或許就注定了自己會(huì)吃到不少苦链嘀。...
    曦Anmigelia諾閱讀 289評(píng)論 0 1