-
AS3的事件傳遞機制(Event、dispatchEvent及addEventListener)
Continue Reading…: AS3的事件傳遞機制(Event、dispatchEvent及addEventListener)當事件被發送出來之後。Event一般來説都會有一個Flow。 Flow分三個部分: Capture(捕獲階段) Targeting(目標階段) Bubbling(冒泡階段) 其關係圖如下:(來源為http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html) 值得一提的是,在FLASH裡,只有和UI相關的物件,會有上圖所示的目標及補獲階段的事件流, 一般像是Timer、Loader事件,是直接進入目標階段,並不會有上圖所示的事件流的流程。 在宣告Event時,也可以先指定事件是否要完整的跑完全部的流程。 宣告事件的語法及及參數意義如下: 參數說明(官方文件) type:String是要發送的事件的識別名稱EX:Event.COMPLETE bubbles:Boolean預設值是false,這個值是用來設定是否要有冒泡階段,如果傳false,代表他不會跑完全部的流程,只會從Capture到target階段就停止。 cancelable:Boolean預設值是false,這個值是用來設定是否這個事件可以被event.preventDefault();取消,如果設定為true的話,代表此事件是可以被取消的(稍候在dispatchEvent會更詳述這部份)。 常用的可以取消的事件有(cancelable為true): FocusEvent.MOUSE_FOCUS_CHANGE、FocusEvent.KEY_FOCUS_CHANGE、TextEvent.TEXT_INPUT。 而發送事件則是用這一段程式碼: 在發送事件時,要注意,假使今天我們是在STAGE裡面有一個box物件,那當我們用box.dispatchEvent(event); 即使事件是用box發送的,事件還是會從stage > root > box這樣跑。(請見上圖) 假如在建立Event時,bubbles設為true,那在上圖跑的流程為stage > root > box > root > stage。 而若bubbles設為false,跑的流程則是stage > root > box 當我們用root.dispatchEvent(event);時 bubbles設為true,上圖跑的流程為stage >…
-
UIView及繪圖練習範例APP
Continue Reading…: UIView及繪圖練習範例APP作業目標:Youtube操作影片 練習原始碼:homework0803 這個作業主要是在練習對view以及簡單的繪圖的操作,還有timer的使用 因此我截錄一些我覺得是練習關鍵的程式碼 下面的是viewController的相關程式碼 一個個出現的程式碼,按下show按鈕時觸發 取得圓圈排列坐標的程式碼,傳入值為圓半徑及角度 下面的程式碼則是在被新增的UIView物件裡面 顯示動畫,這邊要注意的是因為定位點的關係,由於我們希望元件的縮放是以view的中心來做縮放 所以改變的值是self.bounds,一般我們在做元件內部繪圖事件,都會使用self.bounds 而self.frame則是在外部設定物件資訊時使用。 另外,因為- (id)initWithFrame:(CGRect)frame被呼叫的時間是在circle被新建的時後,而不是在被加到畫面時, 為了落實動畫的被執行時間,所以我又實作了layoutSubviews這個方法, 並加上BOOL init當今天是第一次被呼叫時,才會執行playAnimation 然後實作按下後縮小離開時恢復大小的功能 原始碼下載:homework0803
-
上課筆記(五) – UIView操作及繪圖介紹
Continue Reading…: 上課筆記(五) – UIView操作及繪圖介紹view介紹 UIWindow是會在一開始便被xcode建立起來,裡面有很多view。 View的操作: 於上層操作subview: 在supervview裡是用MutableArray的index去管理subView,這index就是tag,tag=0是代表subview自己。 [self addSubView: view];//新增view [self insertSubView: view atIndex:0];//新增view在layer0 [self insertSubView:view belowSubview:upView];//新增view在upView之下 [self insertSubView:view aboveSubview:upView];//新增view在upView之上 [self exchangeSubviewAtIndex:0 withSubviewAtIndex:1];//將第0層的物件和第1層的調換 UIView view = [self viewWithTag:1];//取出在storyboard中tag為1的物件 移除自己: [view removeFromSuperview]; 設為隱藏:[view setHidden:YES]; 繪圖資訊相關的包括CGRect和CGSize及CGPoint,可以用NSValue包起來 view有兩個用來描述其資訊的rect:frame及bounds 這個網頁有說明這兩者的不同:http://n11studio.blogspot.tw/2012/06/frame-bounds.html 值得一題的是這兩者的定位點不同,bounds是在畫面的中心,frame則是在左上角。 Frame:Frame指定了View相對於其父View座標系的位置和大小,用在想要加入一個新產生的view時。 Bounds:Bounds則是view相對於自身坐標系的位置和大小,bounds的起點通常都是(0,0)。處理事件或要畫內部的元件時使用。 Center:顧名思義就是view的Frame的中心。 要注意,在viewDidLoad裡取得的frame和viewWillAppear裡的並不一樣,在viewWillAppear裡時的x及y坐標位置才會被移到正確位置。 元件自動縮放:imageView.autoresizingMask…
-
切換View會用到的函數
Continue Reading…: 切換View會用到的函數切換UIViewController的兩種方式 1. 有NavigationController時 方法一:右側進入 返回到上一頁 方法二:下面切入 返回到上一個UIViewController 2、没有NavigationController的切換方法 返回到上一個UIViewController 取得子viewController或父ViewController的方式 假設View A是來源的ViewController,而View B是目標ViewController。 1.取得子viewController 2.取得父viewController 其中括號和類名是一種強制轉類型的用法。
-
簡易記帳APP範例
Continue Reading…: 簡易記帳APP範例source code在此:範例檔案下載AppPrototype 難得周日在家,就把昨天老師說的練習做完 老實說其實我弄很久(大概有八~九小時跑不掉= =) 可見真的很不熟悉,debug之類都超級慢的 首先就是在跳去圖表的地方, 原本在實作實際功能前可以正常出現圖表,後來不知為何會當掉, 光這個無聊的bug就找了兩三小時(遮臉) 後來發現是因為下面這段程式碼 因為只要是storyboard控制的頁面切換,都會呼叫prepareForSegue 我同時用storyboard去切換新增資料和圖表頁面, 所以圖表的segue.destinationViewController不是InputViewController就會跳錯誤。 在這邊也要說,老師說的inputCon.delegate等於setDelegate是很重要的 因為錯誤訊息一直說沒有setDelegate這個方法 結果我還一直傻傻看不懂是什麼意思~>”<~ (老師上課有說!妳有沒有在聽阿!) 然後第二個遇到的困難,就是我要在轉圖表畫面時,需要把現有資料傳至圖表畫面 一開始我還傻傻的在那又把CostViewController弄一個@protocol 想說要實作一個delegate機制,又是一方面要實作別人的delegate,又要是別人的protocol, 搞得我好混亂阿~ 後來才發現delegate似乎是被呼叫者,要把資料傳給呼叫者時才需使用(不確定,有錯請指正) 後來為了要傳遞資料,我不去使用storyboard的切換頁面方式,改使用程式去自行切換頁面 以下為傳送列表資料的程式碼 【附記一下切換viewController的相關方式】 最後要做的是實作修改和刪除資料的功能 第一步是先將CostViewController實作UITableViewDelegate 本來我還很害怕實作完還要設什麼delegate,或還要自己去呼叫該方法, 結果太令人開心了,只要實作了tableView,按table cell時他就會自己呼叫(灑花) 不過這樣子我還是遇到了一個問題,就是叫出來的畫面是一片黑。 百思不得其解也找不出原因, 後來嘗試的把原本在storyboard裡InputViewController和CostViewController的連接關係拿掉, 突然畫面就又跑出來了。 初步推論是或許一個畫面若用storyboard來切換就會無法自己寫程式碼去切換, 所以當有一個畫面有兩個按鈕都可以連接到時,就需要都自己用程式碼去做掉切換的動作。 剩的就把功能實作完就大功告成囉! 畫面介紹:一進入APP時的畫面 新增/修改記帳資料的畫面 帳目總計圖表…
-
上課筆記(四) – Naming Convention、記憶體管理
Continue Reading…: 上課筆記(四) – Naming Convention、記憶體管理Naming Convention 命名原則: 具解釋性 清楚 不會混淆 類別名稱: 第一個字大寫 前置namespace(在新增專案時會有Class Prefix,就是在設定這個) 駝峰式的寫法 變數名稱 變數類型不需特別表明,可以用名稱去讓人聯想型別,例: BOOL isEditable; NSString * accountName; NSMutableArray * mailBoxes; UIImage * previewPaneImage; NSDictionary * messageDict; 方法名稱:可以清楚表明意思 參數名稱:避免和ivar同名 記憶體管理(IOS沒有gc) 配置記憶體:alloc;清除記憶體:dealloc zomble:不該用到卻用到(值為nil);memory leak:已沒辦法存取卻未把記憶體清掉 使用arc比較容易發生zomble,不用arc則容易發生memory leak。 若是有一段程式碼之中會用到大量的記憶體,則可以用@autoreleasepoll{…}包起來 缺點:速度會慢一些 優點:記憶體較好(在ios裡面,記憶體較重要) strong與weak的差別:變數的宣告值strong代表這個變數會增加retain的值,而weak則不會。 weak比較像依賴的關係,當今天主要strong的變數被刪除了,weak裡的值也會變為空值。…
-
上課筆記(三) – Operation、Delegation、基本類別介紹
Continue Reading…: 上課筆記(三) – Operation、Delegation、基本類別介紹Operation 取得class資料的相關變數 確認兩個變數指向同一個記憶體位置 確認兩個實體的值相同 呼叫物件的描述,回傳字串 [obj description];//等於NSLog(@”%@”,obj); Delegation 定義:物件要完成某件行為時利用別人定義好的某項功能來完成。 所以專案第一個被呼叫的應該是Delegate裡的 xcode專案的main.m 基本類別 NSObject:最基本的物件 [obj className];//自我檢視 [obj isEqual:obj2]//物件比較 NSString NSMutableString:可在原本字串之間插字串(用insertString) Set:無順序性的集合,資料有惟一性(物件要比較是否相同須覆寫isEqual和hash) NSMutableSet:queue的概念,用在List把移出畫面的東西暫存。 NSOrderedSet:依照加入的順序排(比起NSMutableSet) 相關網頁: http://stackoverflow.com/questions/6545722/help-with-isequals-and-hash-in-iphone Array:有順序性的集合,當資料從中間刪除,剩的index會自動往前補。 NSArray: 不可新增修改的array。 NSMutableArray:可新增修改,保證是0,1,2,3的index不會跳號。 Dictionary:存在key-value型式資料的集合 NSDictionary和NSMutableDictionary 走訪所有元素的寫法 NSNumber:才可以丟進set或array裡 NSNull:為了要丟進array裡面,因舊式寫法array宣告nil代表尾端,所以要丟空值要改丟NSNull Scalar:把物件當陣列般存取。例: 要注意的是,如果我們呼叫car[1]代表執行下面兩個函數而不代表真的是array 如果果們呼叫car[@”dict”]則是執行下面兩個函數
-
Flash時間軸運作相關注意點
Continue Reading…: Flash時間軸運作相關注意點遮罩相關: 當圖層在遮罩之下時,影格每次前進,所有的物件都會重新運算並重新產生 若有一個動態label在遮罩之下,若其原本的顯示的文字為”舊的值“,在影格1時,用script將其值設為”新的值“,當影格前進到下一個影格時,又會變回顯示”舊的值“(沒有關鍵影格也是)。 同理,如果我們在影格1時,在as裡指定某個MovieClip,當進入下一個影格時,原本在as指定的MovieClip會與當下畫面上的物件不同,而造成無法對其做操作的狀況,這時候應該要到某定點影格時,再在as裡對物件做指定的動作。 關鍵影格相關: 每次重新經過一個關鍵影格,其物件都會重新產生。 若在影格1裡,有元件a b c,然後在影格2裡,有元件d e。當我們用as,在影格1裡指定a b c元件至某個變數裡,當時間軸跑到影格2,再跑回影格1。原本指定的變數裡面所存的影格,會是上一次影格1裡的元件,但會與現在在畫面上影格1顯示的元件不同。 若某MovieClip的第1影格和第5影格都是關鍵影格,在關鍵影格上的都有同樣的元件a b c。若我們在影格1時用AS指定元件abc,當影格跑到影格5時,畫面上所顯示的元件也會與影格1的元件不同(若沒關鍵影格的狀況下則會是相同的)。 效能相關: 形狀或顏色漸變,是每進入一次影格,便會整個圖層做重繪。因此他的漸變對象不能為元件,而需要是向量圖形。(耗效能) 傳統移動漸變,則是單純對元件的位置或大小做改變,元件本身不會重繪。因此對象一定要是元件。 重繪效能會與重繪區域大小有關,最耗效能的為向量漸層或色塊,因此若無必要,盡可能將元件改使用bitmap點陣形式。 flv動畫在初始載入時會較花效能,但若是畫面上同時有多個動畫,則flv會較省效能。
-
利用ant 構建和部署專案
Continue Reading…: 利用ant 構建和部署專案Ant 可以代替使用 javac 、 java 和 jar 等命令來執行 java 操作,從而達到輕松的構建和部署 JAVA 項目的目的。 1. 利用ant 的javac命令來編譯JAVA程式 Ant 的javac命令用於實現編譯JAVA 程式的功能。下面來看一個簡單的例子:首先我們建立名為 JAVATestPro的JAVA項目,建立src目錄為源代碼目錄,在src目錄下建立HelloWorld.java這個類檔。該類檔的內容如下: 同時在JAVATestPro項目的根目錄下建立build.xml 檔,在該檔中編譯sr 目錄下的JAVA檔,並將編譯後的class檔放入build/classes 目錄中,整個項目的目錄結構如下: |JAVATestPro |src |build |classes |build.xml 在編譯前,需清除classes 目錄,該檔的內容如下: 在項目根目錄(C:\ThinkInJAVACode\JAVATestPro)執行ant命令後,可在該目錄下發現新生成的build/classes子目錄,編譯後生成的HelloWorld.class檔就在該目錄下。 2. 使用java命令執行JAVA程式 Ant 中可以使用 java命令實現運行JAVA程式的功能。可以在上面的build.xml基礎上做修改來實現: 接著,就可以在主控台看見輸出:” hello world!” 3….
-
ANT常用命令
Continue Reading…: ANT常用命令1. copy 命令 copy主要用來對檔和目錄的複製功能。舉例如下: eg1. 複製單個檔: eg2. 對檔目錄進行複製: eg3. 將檔案複製到另外的目錄: 2. delete 命令 對檔或目錄進行刪除,舉例如下: eg1. 刪除某個檔: eg2. 刪除某個目錄: eg3. 刪除所有的備份目錄或空目錄: 3. mkdir 命令 創建目錄。 eg : 4. move 命令 移動檔或目錄,舉例如下: eg1. 移動單個檔: eg2. 移動單個檔到另一個目錄: eg3. 移動某個目錄到另一個目錄: 5. echo 命令 該任務的作用是根據日誌或監控器的級別輸出資訊。它包括…
Search
About Me
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。