[iOS8]モーダルで立ち上げたviewにUIVisualEffectViewをかけて、背景を透過させる

iOS8でモーダルで立ち上げたviewにUIVisualEffectViewをかけて、背景を透過させる方法。

まずは、下記サイトとかを参考に、モーダルでviewを立ち上げられるようにしとく。
http://qiita.com/osamu1203/items/6dedc01e3b975a0ceec4

ParentViewController.swiftの
self.presentViewController(self.modalView, animated: true, completion: nil)
の部分を
self.modalView.modalPresentationStyle = .OverFullScreen
self.presentViewController(self.modalView, animated: true, completion: nil)
にする。

ModalViewController.swift の viewDidLoadで
self.view.backgroundColor = .clearColor()
する。

これでModalViewControllerの方の背景が透過されるので、storyboardで、UIVisualEffectViewを引いて、その上にpickerとかボタンとか配置していけばOK。


参考サイト
[iOS8] Swiftでdelegateを使ったモーダル間の値渡し
セグエを使わない画面遷移時の次画面が黒くなる
iOS7,8でモーダルビューの背景色を半透明にする
モーダルウィンドウをStoryboardで設定して、Delegateで値の受け渡しをする
スポンサーサイト

Sublime Text で「unknown encoding: GBK」とか出た時の対処法

Sublime Textで作業中、保存しようとすると急に
Can not convert file encoding of NinpuCordinateController.php to GBK, it was saved as UTF-8 instead:
unknown encoding: GBK
みたいなダイアログが発生した。
201502281.png

原因は
Command+Shift+C
のショートカットが「中国語繁字体(GBK)にエンコード」というのに割り当てられているのが原因のようです。

201502282.png

解決方法は、ConvertToUTF8が入っていれば、
「File」>「Set File Encoding To」> 「UTF-8」
でUTF-8に戻してあげればOK。

ショートカットは、
Preferences > Key Bindings – User
で、
{
"keys": ["shift+super+c"],
"command": "null"
}
を設定しとくと、もう勝手になることはなくなります。

参考サイト
[Sublime Text]Command+Shift+CでGBKにエンコードされないようにする
SublimeTextが文字コード変換に意外に使える件

RapidSSLの設定方法メモ

いつも忘れるのでメモ。

SSLCertificateFile に設定するやつ
→メールで送られてきたSSLサーバー証明書
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
で囲まれてるやつ。

SSLCertificateKeyFile に設定するやつ
→CSR作る時に設定した秘密鍵
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
で囲まれてるやつ。

SSLCertificateChainFile に設定するやつ
→メールに書いてあるURLか、ココからダウンロード。
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
で囲まれてる。
RapidSSLは、2つくっついてる。

この辺、苦手。。

参考サイト
さくらVPS + CentOS Rapid SSLのインストール
SSL証明書のKEYファイル・CSRファイル・CRTファイルのチェック方法

facebookページのfeedで取れない情報がある

Graph APIを使ってfacebookページのfeedを取得した時に、apiで取得出来ないfeedがあった。
取得の仕方は下記で。
$GET_ACCESS_TOKEN_URL  = 'https://graph.facebook.com/v2.2/oauth/access_token?client_id=%s&client_secret=%s&grant_type=client_credentials&scope=public_profile,read_stream,publish_actions,user_likes,user_activities,user_photos,user_about_me,user_status,manage_pages&locale=ja_JP';
$GET_FEED_URL = 'https://graph.facebook.com/v2.2/%s/feed?access_token=%s&limit=200&locale=ja_JP';

$app_id = 'facebookアプリのapp_id';
$app_secret = 'facebookアプリのseacret key';

// アクセストークンを取得
$access_tokens = file_get_contents(sprintf($GET_ACCESS_TOKEN_URL, $app_id, $app_secret));

// トークンを分割
$access_token = explode('=', $access_tokens);
$access_token = $access_token[1];

$facebook_page = '取得したいfacebookページ'
// feed取得
$res = file_get_contents(sprintf($GET_FEED_URL, $facebook_page, $access_token));
$data_array = json_decode($res, TRUE);

print_r($data_array);

これで、ページへの投稿とかも取れていたが、取れないユーザーが数人いた。

結論を言うと、投稿している人の設定で取得が出来ていなかった。

設定->アプリ->他のユーザーが使用しているアプリ の項目に「私の写真」という項目があって、
このチェックをオフにすると、公開投稿であっても、API経由ではデータを取れなくらしい。

201502161.png

swiftでHTTP通信とかして受け取った値で何かする

swiftでHTTP通信とかして受け取った値をviewとかに表示する方法のメモ。

1.UIViewControllerで、適当にUITextFieldとかUIButton配置して、outlet繋げておく。
2. 通信するクラスを作成。(api.swift)
import Foundation

class Api {
func sendPost(#url: String, params: [String: String], callback: (Dictionary<String, AnyObject>, String?) -> Void ) {
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
var session = NSURLSession.sharedSession()
var responseBody = Dictionary<String, AnyObject>()
let paramsData = prepareParms(params)
request.HTTPMethod = "POST"

var err: NSError?
request.HTTPBody = paramsData
let task = NSURLSession.sharedSession().dataTaskWithRequest(
request, {
data, response, error in

if error != nil {
println("error=\(error)")
callback(Dictionary<String, AnyObject>(), error.localizedDescription)
}

println("response = \(response)")

let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
responseBody = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as Dictionary<String, AnyObject>
println("responseBody = \(responseBody)")

callback(responseBody, nil)
})
task.resume()
}

// パラメータ作成
private func prepareParms(params: [String: String]) -> NSData {
var postString = String()

for (param, val) in params{
postString = postString.stringByAppendingString("\(param)=\(val)&")
}

return postStringData!
}
}


3.VCで、APIのクラス呼び出す。
class HttpViewController: UIViewController {
@IBOutlet weak var nickname: UITextField!
@IBAction func tapRegist(sender: UIButton) {
var api = Api()
api.sendPost(url: "http://test.com/get", params:["id": "1"]) {
(data: Dictionary<String, AnyObject>, error: String?) -> Void in

if error != nil {
// エラー表示
println(error)
} else {
println("get data -> \(data)")
nickname.text = data['nickname']
}
}
}
}


callbackの書き方がいまいちよくわからんかった。。

参考サイト
Swiftの略記法
HTTP in Swift
SwiftでHTTPリクエストする

swiftでsha256

swiftでsha256変換する方法のメモ。

1.xcodeで、Project navigatorを開いて、AppDelegate.swift あたりを選択して command + N で、Headerファイルを作成する。
ファイル名は、ProjectNmae-Bridging-Header.h とかで。
201502131.png

2.ProjectNmae-Bridging-Header.h の中身を下記のようにする。
#ifndef ProjectNmae-Bridging-Header_h
#define ProjectNmae-Bridging-Header_h

#import <CommonCrypto/CommonCrypto.h>

#endif
#ifndefとか#defineの部分は、初期のままで問題なし。

3.XcodeのターゲットアプリケーションのBuild Settingsで"Objective-C Bridging Header"に先ほどのProjectNmae-Bridging-Header.hを指定する。
$(SRCROOT)/$(PROJECT)/ProjectName-Bridging-Header.h

201502132.png
念のため、出てきたパスにProjectNmae-Bridging-Header.hのファイルがちゃんとあるか確認。
パスが間違ってるとコンパイルエラーになる。

4.使いたいswiftファイルでstringのextensionを作る。
extension String {
func sha256String() -> String {
let cstr = self.cStringUsingEncoding(NSUTF8StringEncoding)
let data = NSData(bytes: cstr!, length: countElements(self))

var digest = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)

CC_SHA256(data.bytes, CC_LONG(data.length), &digest)

var output = NSMutableString(capacity: 64)
for var i=0; i<32; i++ {
output.appendFormat("%02x", digest[i])
}

return output as String
}
}


5.stringの関数として使えるようになる。
var str: String = "abc"
println(str.sha256String())



参考サイト
SwiftからObjective-Cのライブラリを使ってみる
SwiftからObjective-C のヘッダファイルを読み込む方法
HMAC-SHA1 in Swift

"Warning: Attempt to present ViewController whose view is not in the window hierarchy" が発生した時の対処法

swift で開発中に画面遷移をpresentViewControllerとかでやろうと思って
Warning: Attempt to present ViewController whose view is not in the window hierarchy
のエラーが発生した時の原因。

presentViewControllerの呼び出し位置が、viewDidLoadだった事が原因。

viewDidAppear の中でpresentViewControllerをすればOK。

参考サイト
【iPhoneアプリ開発】StoryBoardで画面遷移しない時の対処法

Dropboxでビジネスアカウントに招待された後の手順

Dropboxでビジネスアカウントに招待された後に設定する内容メモ。

招待されると、メールが来るからそこに記載されてるリンクをクリックで、下記のページにくる。
モザイク部分は、ビジネスアカウントの名前と、招待された自分のDropboxのアカウントが表示されている。
p1.png

ここで、「有効にする」をクリック。
するとこの画面になる。
p2.png

なので、今回は自分の個人Dropboxに今までのものは保存しておきたいので、「Dropbox(個人用)にファイルを移動する」をクリック。

p3.png
ここで、いままで使っていたアカウントを入力しても、全然先に進めなかった・・・。
ここで設定しなければいけないのは、新規に作成するアカウントらしい。
なので、新規にメールアドレスを入力して、Dropbox(個人用)アカウントを作成する。

p4.png
個人用のアカウントが作成出来たので、招待されたアカウントのパスワードを入力すればOK。



プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事