ios --- 為程式新增一個懸浮框
一、UIWindow的簡介
1.UIWindow是一種特殊的UIView,通常在一個app中只會有一個UIWindow
2.iOS程式啟動完畢後,建立的第一個檢視控制元件就是UIWindow,接著建立控制器的view,最後將控制器的view新增到UIWindow上,於是控制器的view就顯示在螢幕上了
3.一個iOS程式之所以能顯示到螢幕上,完全是因為它有UIWindow。也就說,沒有UIWindow,就看不見任何UI介面
二、在window上新增Button
1.建立window
-(UIWindow *)window
{
if (!_window)
{
id <UIApplicationDelegate> delegate = [[UIApplication sharedApplication] delegate];
if ([delegate respondsToSelector:@selector(window)])
{
_window = [delegate performSelector:@selector(window)];
}
else
{
_window = [[UIApplication sharedApplication] keyWindow];
}
}
return _window;
}
2.建立Buuton
-(UIButton *)levitateButton
{
if (!_levitateButton)
{
_levitateButton = [UIButton buttonWithType:UIButtonTypeCustom];
_levitateButton.frame = CGRectMake(self.view.frame.size.width - 70, self.view.frame.size.height - 200, 60, 60);
_levitateButton.backgroundColor = MainColor;
[_levitateButton setBackgroundImage:[UIImage imageNamed:@"Button"] forState:UIControlStateNormal];
_levitateButton.layer.cornerRadius = 30.0f;
_levitateButton.layer.masksToBounds = YES;
[self.window addSubview:_levitateButton];
[_levitateButton addTarget:self action:@selector(edit) forControlEvents:UIControlEventTouchUpInside];
UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureRecognizer:)];
gesture.delegate = self;
[_levitateButton addGestureRecognizer:gesture];
}
return _levitateButton;
}
3.拉動懸浮按鈕移動需要遵守手勢的協議 UIGestureRecognizerDelegate
-(void)panGestureRecognizer:(UIPanGestureRecognizer *)recognizer
{
CGPoint point = [recognizer translationInView:recognizer.view.superview];
CGPoint center = CGPointMake(recognizer.view.center.x + point.x,recognizer.view.center.y + point.y);
if (center.x > self.view.frame.size.width - recognizer.view.frame.size.width/2)
{
center.x = self.view.frame.size.width - recognizer.view.frame.size.width/2;
}
else if (center.x < recognizer.view.frame.size.width/2)
{
center.x = recognizer.view.frame.size.width/2;
}
else if (center.y < 109 + recognizer.view.frame.size.width/2)
{
center.y = 109 + recognizer.view.frame.size.width/2;
}
else if (center.y > self.view.frame.size.height - recognizer.view.frame.size.width/2)
{
center.y = self.view.frame.size.height - recognizer.view.frame.size.width/2;
}
[UIView animateWithDuration:0.1 animations:^{
recognizer.view.center = center;
[recognizer setTranslation:CGPointZero inView:recognizer.view.superview];
}];
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return YES;
}
根據自己的需要修改拉動的範圍
三、總結
上面的程式碼還稍微繁瑣點不過可以使用的,後續我會優化封裝下使程式碼更加簡潔,歡迎大家關注奔跑的蝸牛
相關推薦
ios --- 為程式新增一個懸浮框
一、UIWindow的簡介 1.UIWindow是一種特殊的UIView,通常在一個app中只會有一個UIWindow 2.iOS程式啟動完畢後,建立的第一個檢視控制元件就是UIWindow,接著建立控制器的view,最後將控制器的view新增到UIWindow上,於是控制
ios為view新增一個圓角邊框
_monthBtnView.layer.cornerRadius = 2; _monthBtnView.layer.masksToBounds = YES; //給圖層新增一個有色邊框 _monthBtnView.layer.borderWid
webgl中新增一個div框實現框選
在webgl的開發中,新增一個div,可以實現框選的樣式。過程很簡單,直接看程式碼吧,這裡主要實現了點選第一次的時候確定div的位置,第二次實時顯示div的大小及樣式。這裡為了顯示實在canvas上畫div,將canvas設定為紅色。 <!DOCTYPE HTML PUBLIC "-//
Java 新建一個簡單的窗體(僅新增一個文字框)
public static void main (String[] args) { //新建一個JFrame窗體 JFrame jf = new JFrame(); //設定窗體的寬為400 高為300 jf.setSize(400,
iOS為UIView新增虛線邊框
本文為原創,未經允許勿轉載 有時候需要為UIView新增虛線描邊,本文記錄一種實現方式,主要是通過對UIView的根layer新增CAShapeLayer來完成。效果圖如下: 核心程式碼示例如下: CGSize screenSize = [
為DataGridView 新增複選框,實現全選功能
1、指定DataGridView的第一列為DataGridViewCheckBoxColumn 2、為第一列的標題欄新增一個CheckBox,假設為HeaderCheckBox同時為HeaderCheckBox定義好 MouseClick 和 KeyUp 事件priva
vc為視窗新增一個陰影或者毛玻璃背景
看到迅雷啊qq啊都實現了視窗的周圍有一層毛邊的玻璃背景,使原本單調的背景變的好看多了,就想著怎麼做了,終於在codeproject上找到了一個外國老寫的WndShadow類的,他主要是通過setwindowlong來獲取到主視窗的訊息。如視窗移動,縮小,變大等,獲取訊息做相
C# winform 編譯成功後為程式新增清單檔案,新增Icon以及強簽名
為了使程式不出警告,強簽名這裡是在最後完成的。 簡單說一下過程: 1.新建一個文字檔案,輸入以下程式碼: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xml
iOS為類別新增屬性的方法(RunTime)
一般認為Category不能新增變數,其實系統已經告訴我們是可以的. 這傢伙已經給UIViewController添加了圖中的幾個屬性,那麼如何實現? 其實是使用@dynamic來動態新增的。 (
在StringGrid中每行新增一個選擇框(checkbox)
StringGrid得實際使用中,經常會遇到這樣的需求,使用者想對每一行的記錄作一個標記,想對做了標記的記錄作特別的操作。例如想刪除多條記錄。 在網頁中經常有類似的應用,例如在電子郵箱裡,顯示郵件的每一行都有一個選擇框,使用者可以對多個郵件同時做刪除,移動的操
用核心模組的方式為系統新增一個系統呼叫
今天,利用核心模組的方式向系統添加了一個核心模組。在make後,我開始sudo insmod hello.ko 完成之後。老是出現killed,在lsmod後,發現hello這個模組已經載入上去,但是測試函式呼叫的時候 ,發現根本無法呼叫這個系統呼叫。在經
Qt: 為程式新增外部字型
Qt: 新增外部字型到程式的方法: #include <QFontDatabase> #include <QIODevice> QString loadFontFamil
caddy & grpc(3) 為 caddy 新增一個 反向代理外掛
caddy-grpc 為 caddy 新增一個 反向代理外掛 專案地址:https://github.com/yhyddr/caddy-grpc 前言 上一次我們學習瞭如何在 Caddy 中擴充套件自己想要的外掛。部落格中只提供了大致框架。這一次,我們來根據具體外掛 caddy-grpc&nbs
caddy & grpc(3) 為 caddy 新增一個 反向代理外掛
caddy-grpc 為 caddy 新增一個 反向代理外掛 專案地址:https://github.com/yhyddr/cad
xenomai核心解析--雙核系統呼叫(三)--如何為xenomai新增一個系統呼叫
版權宣告:本文為本文為博主原創文章,轉載請註明出處。如有錯誤,歡迎指正。 @[toc] ### 一、新增系統呼叫 下面給xenomai新增一個系統呼叫`get_timer_hits()`,用於獲取應用程式執行CPU的定時器中斷產生的次數,類似於VxWorks裡的tickGet()。需要說明一下VxWorks
iOS之給圖片新增一個顏色相框(Swift4.2)
override func viewDidLoad() { super.viewDidLoad() // 給一張圖片新增一個顏色相框 let image
為你的應用新增懸浮框
不知道有沒有童鞋用過QQ的Android版本中的一個高清版本,當你退出QQ的時候,會在你的螢幕上出現一個QQ圖示的懸浮窗,就和PC上的迅雷的懸浮視窗一樣,在所有應用的最上層,本來這個功能感覺還是挺好的,結果TX就給流氓了下,居然沒有做隱藏掉這個懸浮窗的功能。今天就來為大家簡
vue+elementui 新增和編輯如何實現公用一個彈框
and v-model element tex off footer top ima mac //html代碼: //按鈕 <el-button type="primary" size="medium" @click="addEquipment">新增<
03 React快速入門(三)——實現從一個輸入框中新增完資料後此輸入框內容清除的功能
功能描述: 我們在一個輸入框輸入內容,然後點選新增按鈕,此輸入框的內容就會新增到頁面上,但是此輸入框中還存在上次輸入的內容,我們想在每次輸入新增完成之後,此輸入框中的內容就會清除,如圖:  
qt 如何為應用程式新增圖示
轉載:https://blog.csdn.net/taoerit/article/details/37735639 方法一:通過qtcreator新建一個檔案filename.qrc, 1、將圖片新增到filename.qrc檔案中:選擇Add Prefix得到/new/pre