一些小技巧

来源:http://www.cnblogs.com/leonlincq/archive/2016/12/01/6121752.html
-Advertisement-
Play Games

記錄下一些不常用的技巧,以防忘記,複製用。 1、獲取當前的View在Window的frame: 2、UIImageView 和UILabel 等一些控制項,需要加這句才能setCorn 3、手機上的沙盒路徑要加"Documents",不然存儲寫入失敗!mac上不用! 4、圖片拉伸不失真,如聊天軟體對話 ...


記錄下一些不常用的技巧,以防忘記,複製用。

 

1、獲取當前的View在Window的frame:

UIWindow * window=[[[UIApplication sharedApplication] delegate] window];  
CGRect rect=[_myButton convertRect:_myButton.bounds toView:window];

 

2、UIImageView 和UILabel 等一些控制項,需要加這句才能setCorn

_myLabel.layer.masksToBounds = YES;

 

3、手機上的沙盒路徑要加"Documents",不然存儲寫入失敗!mac上不用!

[_myArray writeToFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"] atomically:YES];
 
NSArray *tempAllData = [NSArray arrayWithContentsOfFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"]];

 

4、圖片拉伸不失真,如聊天軟體對話氣泡

1)、方法1,比較老的,

UIImage *tempImage2 = [UIImage imageNamed:@"sub.png"];
tempImage2 = [tempImage2 stretchableImageWithLeftCapWidth:tempImage2.size.width/2 topCapHeight:0];

 

 2)、方法2,比較新的

UIImage *tempImage3 = [UIImage imageNamed:@"sub"];

CGFloat tempH = tempImage3.size.height/2;
CGFloat tempW = tempImage3.size.width/2;
    
UIEdgeInsets tempEdg = UIEdgeInsetsMake(tempH, tempW, tempH, tempW);
    
tempImage3 = [tempImage3 resizableImageWithCapInsets:tempEdg resizingMode:UIImageResizingModeStretch];

 

 5、視頻截取縮略圖,其中CMTimeMakeWithSeconds(5,1),調整截圖幀數/秒數,一般不用特意去修改,不做參數傳入,除非片頭一段時間都一樣的視頻。

#import <AVFoundation/AVFoundation.h>

-(UIImage *)getThumbnailImage:(NSString *)videoURL
{
    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoURL] options:nil];
    
    AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    
    gen.appliesPreferredTrackTransform = YES;
    //控制截取時間
    CMTime time = CMTimeMakeWithSeconds(5, 1);
    
    NSError *error = nil;
    
    CMTime actualTime;
    
    CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
    
    UIImage *thumb = [[UIImage alloc] initWithCGImage:image];
    
    CGImageRelease(image);
    
    return thumb;
}

 

 6、cell下劃線左邊頂住屏幕左邊。

cell.preservesSuperviewLayoutMargins = NO;
cell.layoutMargins = UIEdgeInsetsZero;
cell.separatorInset = UIEdgeInsetsZero;

 

7、去除xcode8冗餘信息,雖然已經記住了。

OS_ACTIVITY_MODE    disable

 

8、播放音頻

1)工程內音頻

1-1)、獲取音頻路徑

NSString *path = [[NSBundle mainBundle] pathForResource:@"shakebell" ofType:@"wav"];
    
NSURL *url = [NSURL fileURLWithPath:path];

 

 1-2)、創建音頻播放ID

SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);

 

1-3)、Play

AudioServicesPlaySystemSound(soundID);

 

2)系統音頻,參數為1000-1351,具體查表,如1007為“sms-received1”

AudioServicesPlaySystemSound(1007);

 

9、字體自適應

1)、固定的Frame,自適應Font大小,如數量增減,1和1000。

[label1 setAdjustsFontSizeToFitWidth:YES];

 

2)、固定的Font,自適應Frame,用於信息類顯示

[label2 sizeToFit]; 

 

3)、固定的Font,獲取自適應Frame值,反過來設置Label的Frame,用於信息類顯示。這裡的100是等下設置Label的width,也是返回的rect.frame.size.width

CGRect rect = [templabel.text boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:templabel.font} context:nil];

 

10、AFNetworking 檢測網路連接狀態

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"%ld",status);
    }];

 

11、編輯相關

1)鍵盤事件通知

1-1)、彈出鍵盤可能蓋住TextField。監聽鍵盤的通知

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(moveView:) name:UIKeyboardDidChangeFrameNotification object:nil];

 

1-2)、moveView方法里接收通知,tempTime是鍵盤動畫時間,tempY是鍵盤當前的y軸位置。(接著要移動評論框或者移動後面的ScrollView都可以)

CGFloat tempTime = [[noti.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat tempY = [[noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].origin.y

//重置約束條件
//self.theBottomSpace.constant = ?;

[UIView animateWithDuration:duration animations:^{
        //更新約束
        [self.view layoutIfNeeded];

    }];

 

2)dealloc記得移除

[[NSNotificationCenter defaultCenter]removeObserver:self];

 

3)touchesBegan:withEvent && scrollViewDidScroll -->屏幕點擊&&屏幕滑動要取消編輯狀態

[self.view endEditing:YES];

 

12、上傳圖片(頭像)

1-1)、把Image打成NSData

NSData *imagedata = UIImageJPEGRepresentation(tempImage, 1.0);

 

1-2)、AFNetworking的POST方法填如下。formData:POST方法里的Block參數,name:跟伺服器有關,filename:隨意填,mimeType:就image/jpg。

[formData appendPartWithFileData:imagedata name:@"imgFile" fileName:@"idontcare.jpg" mimeType:@"image/jpg"];

 

13、強制佈局

[self.view layoutIfNeeded];

 

14、圖片雙擊縮放

1)scrollView才可以縮放,所以要把ImageView加在scrollView,給scrollView(這裡的 self )添加手勢識別。要設最大/小縮放比例!

UITapGestureRecognizer *imageTwoTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(twoTapAction:)];

imageTwoTap.numberOfTapsRequired = 2;

[self addGestureRecognizer: imageTwoTap];

 

2)第一次點哪放大哪,第二次恢複原來大小

#define SCALE_WIDTH  60    		//要放大的局部寬度大小
#define SCALE_HEIGHT 60    		//要放大的局部高度大小

-(void)twoTapAction:(UITapGestureRecognizer *)tempTap
{
    if (self.zoomScale != 1.0)
    {
        [self setZoomScale:1.0 animated:YES];
    }
    else
    {
        CGPoint tempPoint = [tempTap locationInView:self];
        [self zoomToRect:CGRectMake(tempPoint.x-SCALE_WIDTH/2, tempPoint.y-SCALE_HEIGHT/2, SCALE_WIDTH, SCALE_HEIGHT) animated:YES];
    }
}

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建一個自定義的開關,可以自行決定開關的背景。當滑動開關時,開關的滑塊可跟隨手指移動。當手指鬆開後,滑塊根據開關的狀態,滑到最右邊或者滑到最左邊,同時保存開關的狀態,將開關的狀態回調給調用者。 ...
  • ViewPager是一個可以用來滑動內部View的組件,他有一個老搭檔PagerAdapter,我們這次就來看看他們這兩位拍檔的本事。 我們要使用ViewPager與PagerAdapter結合 首先佈局文件 <android.support.v4.view.ViewPager android:id ...
  • 資源文件的引入可以有兩種方式,寫法如下: 1、s.resource = "DDKit/**/*.{png,bundle,xib,nib}" 2、s.resource_bundles = { 'DDKit' => ['DDKit/**/*.{png,bundle,xib,nib}'] 'DDKit' ...
  • 本期內容包括: 用Mockito做RxJava的單元測試; Android開發中的命令行使用; Android 7.1的App Shortcuts; 自定義View的繪製; 用Firebase的Remote Config進行feature逐步分發; APK分析工具的使用, APK瘦身討論; RxJa... ...
  • 1、Volley、Retrofit 網路框架2、ormlite、GreenDao資料庫框架3、AndroidAnnotations、butterknife、Dagger註解框架4、響應式編程 RxJava JVM上的響應式擴展 RxJavaJoins 為RxJava提供Joins操作 RxAndro ...
  • UITableview是大家常用的UIKit組件之一,使用中我們最常遇到的就是對delegate和dataSource這兩個委托的使用。我們大多數人可能知道當reloadData這個方法被調用時,delegate和dataSource就會被回調,但是其中具體的細節,可能很多人不會去探究。我最近有興趣 ...
  • 學習到現在的主要問題是沒有進行例子的完美歷練,說白了,就是沒動手親自的試試,寫寫對應的代碼,理解一下主要的設計思想,這個應該是學習設計模式我最重要的地方,那麼現在針對之前學習的設計模式做一個總結和回顧吧 0.設計模式分析規律 在講解這個設計模式之前,我們應該學習到設計的原則,1.分析程式中變化的位置 ...
  • 看到一些程式都有這種寫法,也不知道原創者是誰了。先在博客保存下。 在.m文件 在.h文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...