原创 iOS 獲取視頻時長和大小

這裏說的視頻並不是相冊中的視頻,而是保存在你app沙盒中的視頻文件 //記得導入AVFoundation框架 #import <AVFoundation/AVFoundation.h> xxfile.h /** * @meth

原创 iOS控件禁用系統方法

/// 由於要實現此方法,所以自定義控件是不可避免的 - (BOOL)canPerformAction:(SEL)action withSender:(__unused id)sender { //有很多系統方法,此處分別

原创 Lua實現switch-case

switch是啥?別多想,不是遊戲機? ! Lua君說:雖然我沒有case,但是我有switch啊,而且你還可以隨意改名字,比如你愛慕已久的CuiHua~ 實際上switch同學像是一個表,丟給它一個a,它就把case:a對應的地

原创 Lua數據類型

lua入門的系列文章於2019年初誕生於陌陌公司內部的文檔系統,目的是爲部門內部的lua新人培訓而做。2020年疫情期間想做些mln的推廣,便轉至公衆號。佛系一段時間後覺得公衆號受衆面比較窄,遂轉移至csdn,希望能幫助更多的人快

原创 iOS 教你寫通用的description方法

/** * @property (readonly, copy) NSString *description; * description是NSObject的一個只讀屬性,對於一般的屬性都會有getter和setter方法,但

原创 Mac中Xcode、文本編輯器逆天覆制

可能你會遇到這種需求,我想複製每一行的某一部分內容,如下 const NSTextAlignment TTTTextAlignmentLeft = NSTextAlignmentLeft; const NSTextAlignmen

原创 MLN —— 支持熱更的移動跨平臺解決方案

這裏寫自定義目錄標題MLN簡介MLN的原理MLN的優勢什麼是LuaMLN的學習成本 MLN簡介 經歷了兩年多的打磨及開發實踐,MLN終於開源了,git地址 MLN是陌陌技術團隊開源的移動跨平臺開發框架,因其較低的學習成本、較高的人

原创 iOS 最新仿微信氣泡實現

最近公司做IM,氣泡實現想要用仿造微信,各種詞條百度無果,vpn也過期了無法google,但是最後總算找到些苗頭http://blog.csdn.net/johnzhjfly/article/details/41175015,在這

原创 iOS TTTAttributedLabel複製

對於試圖類的第三方控件,一般情況下我是不喜歡使用cocoapods添加的,主要原因就是修改十分不便,稍一不慎就一朝回到解放前了。 TTTAttributedLabel是一個我特別喜歡的第三方label控件,可以替換UILabel

原创 iOS cell高度自適應 - 教你寫出優雅的table view

作爲一個iOS開發者,自然少不了了table view打交道,table view中最令人頭疼的是各種cell的高度計算了,雖然技術上並不難,但是對於自定義cell來說一旦控件比較多,計算起來就會很麻煩,會出現很多和height相

原创 Lua繼承的實現

最簡單的繼承 -- 創建Person表,默認有name,gender,age三個屬性以及一個cry()方法 Person = {name = "小明", gender = "F", age = 18} function Perso

原创 iOS -setValue:forKey:和-setObject: forKey區別

首先看一下下面的代碼,請問程序是否會崩潰?如果不會,那麼輸出結果應該是什麼? NSMutableDictionary * dic = [@{@"name":@"小明"} mutableCopy]; [dic setObject:@"Men

原创 iOS PanGesture和ScrollView的手勢衝突解決方案

之前擼k線,k線視圖作爲一個子控件被放在了ScrollView上,由於k線有個左右滑動的手勢,於是使用了UIPanGestureRecognizer,這導致了在K線上上下滑動時ScrollView沒有任何相應,在交互上不太友好。 因此本內

原创 用系統方法實現網易雲音樂VC翻轉動畫

翻轉動畫僅僅是VC切換動效的一種,通過此方法可以方便的實現VC切換的各種動效。 思路: MasterVC作爲根視圖控制器 AAVC和BBVC之間切換均通過MasterVC進行。 MasterVC作爲視圖控制器的容器,AAVC和BB

原创 struct 結構體變量的內存分配

我們先定義一個結構體 typedef struct { uint32_t num0; // 4 bytes uint16_t num1; // 2 bytes uint16_t num2;