LINMOS.LOG

Amos Lin 的技術筆記

設定 MySQL 預設編碼及儲存引擎

修改 MySQL 設定檔(my.cnf、my.ini)中的 [mysqld] 區段

將編碼設定成 UTF-8

1
2
character-set-server = utf8
collation-server = utf8_unicode_ci

設定預設儲存引擎

1
default-storage-engine = MyISAM

如果要指定 client 連線的編碼,則在 [client] 區段加入

1
default-character-set = utf8

Octopress 首篇文章

最近發現許多高手前輩的 Blog 都變成一款簡潔風格的佈景,仔細一看才發現原來大家都從 Wordpress 跳槽到 Octopress 了,於是做了點功課,發現 Octopress 才是真正適合 Programmer 啊!之前用 WP 一直都覺得很麻煩,要調整和安裝一堆東西才能達到想要的效果,然後寫文章的介面也很亂。所以一知道這玩意當然也要開始改用 Octopress 啦。

剛好之前架的站因為讀了忙碌的研究所,從09年後就沒更新了,直到最近又開始想寫些東西,所以舊的站就直接讓他荒廢吧…

讓 iOS 的 SQLite 支援 Foreign Key

SQLite 從 3.6.19 版之後已經支援外部索引鍵(Foreign Key,FK)的功能,也就是說 iOS 4.x 以上的版本都可以使用,但是實際應用時會發現是行不通的,這是由於 iOS 編譯內建的 SQLite 預設是把 Foreign Key 功能關閉,所以「每次」資料庫連接後都需送出開啟 Foreign Key Support 的 Query,如下:

1
PRAGMA foreign_keys = ON

之後再執行所需要的 SQL 語句即可。有了 FK 的支援,對於多資料表的 Update、Delete 就會方便許多。

改善 UISlider 在 UIScrollView 裡的觸控成功率

在使用 ScrollView 來設計畫面時,如果加入諸如 Slider bar 之類的元件成為 subview,兩者的觸控事件就會有所影響,預設的情況下,如果使用者直接對 slider 作拖曳的動作,大多會觸發 scrollView 的滾動事件造成 slider 無法正常使用,除非先在 slider 按住停留一下才可以正常拖曳,這其實是跟 UIScrollView 的設計有關係。

在預設的情況下,scrollView 接收到觸控事件之後,會先 delay 以確定使用者有沒有繼續做滾動視圖的動作,如果有就會立即移動 scrollView,沒有的話才把觸控事件傳遞給上層的 UIControl 元件,這也就是造成前述問題的原因所在,接下來提供一個解決方法。

首先要繼承 UIScrollView 並且覆寫 touchesShouldCancelInContentView 方法,如下:

sample.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <UIKit/UIKit.h>

@interface MyScrollView : UIScrollView {
}
@end

@implementation MyScrollView

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    if ([view isKindOfClass:[UISlider class]]) {
        return NO;
    }
    return YES;
}

@end

重點是在第11行判斷 touch view 是否為 UISlider,並且回傳 NO。 接著設定 scrollView.delaysContentTouches = NO,停止觸控事件的延遲處理。

經過這樣處理如果還是不太容易操作 slider,這時可以把 slider 加入到一個區域面積比較大 UIView 裡,再放進 scrollView,然後前面的 touchesShouldCancelInContentView 也把這個 UIView 加入判斷,這樣就可以正常操作 slider 了,此方法也可以套用到其他元件上。