【Swift】UITapGestureRecognizerをsubviewに効かせたくない、特定のviewにのみ効かせたい【iOS】

SwiftにてUIViewController.viewにのみにタップイベントを実装したいことがありました。具体的にはモーダル画面のサブビューにいろいろ画像などを配置し、背景タップでモーダル画面を閉じるという仕様です。

override func viewDidLoad() {
    super.viewDidLoad()
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(hoge))
    view.addGestureRecognizer(tapRecognizer)
}

もちろんhogeメソッドは適宜実行するメソッドを当てはめてください。
上記コードを書いたところ、背景タップでイベントは発生したのですが、サブビューをタップしても同様のイベントが発生してしまったのです。
そこでどのviewをタップしたかを詳細に判別するにはUIGestureRecognizerDelegateを利用し、func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Boolを実装します。

override func viewDidLoad() {
        super.viewDidLoad()
        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(hoge))
        tapRecognizer.delegate = self
        view.addGestureRecognizer(tapRecognizer)
    }

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if touch.view == self.view {
            return true
        }
        return false
}

こうすることでUIViewController.viewのみにイベントが発生するようにできました。
UIGestureRecognizerDelegateについては以下のqiitaによくまとまっていました。
qiita.com


私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。
www.yyux.jp

Objective-cで指定した位置から配列を切り出すsubarrayWithRange

Objective-cで指定した位置から配列を切り出す、例えば0〜3まである配列で先頭の3つだけの配列がほしい時に使えます。

コードは以下の通り

ちなみにNSMakeRangeでは配列にない範囲を指定した場合例外がでるので注意しましょう。例えばこの場合NSMakeRange(0, 5)のように指定してしまうと例外が出ますので注意しましょう。

かなり基礎的なことですが日本語では記事が見つからなかったのでメモしておきます。

 

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp

macOSでcommand+tabでアプリ切り替えができないときはDockを再起動しよう

macを使用していると定期的に訪れるのですが、command+tabが効かないことがあります。これまではmacを再起動していて直していたのですが、流石に毎回再起動するのは面倒なのでどうしたものかと思っていたら解決策が見つかりました。やり方は以下です。

Dockの再起動です。

再起動と記載しましたがDockを終了させるだけで自動的に再度立ち上がります。手順としては

アクティビティモニタ→(どのタブでもいいので)Dockを探す→Dockを終了

以上で症状が治りました。Dockが一瞬プロセスから消えるのですがすぐに立ち上がります。簡単な内容でしたがメモとして残しておきます。

 

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp

【Objective-C】UILabelにタップイベントを付ける方法

本日Objective-cを触っていて、UILabelにタッチイベントをつけたいことがあったので、調べた結果をメモしておきます。

 とまあ特に簡単なのですが、これでLavelタップでhogeメソッドが呼ばれます。

これまでも何度か調べたことがあることだったので記録しておきます。

毎回単UITapGestureRecognizerを生成→UILavelに設定してうまく動かないなーってやっていました。userInteractionEnabledをYesにしないとあかんすね。Swiftでおおそらくほとんど同じかと…

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp

PHPの変数のスコープについて完全に勘違いしていたこと

他言語からPHPに移って来た身の私にとっては次のコードは完全に機能しないものと思っていました。

なぜならif文で初登場の$hogeはifの外からは絶対に見えないからです。ただ、これは結果として「hoge!」と出力されます。

Javaの場合だと以下のように書かないといけないと思います(適当に書いたので間違ってるかもしれないです)。

 Javaの場合はif文でもスコープは発生しますから条件分の中で変数の値を変える場合、その外で宣言しておく必要があります。僕の場合、全くこれと同じ理解をしていただめ、PHPの場合でも外で宣言だけしていました…

PHPの場合上記3つの場合のみでスコープが発生します。なんでif文やfor文ではローカルスコープ内のくくりのため括弧の位置など気にしなくてもいいようです。

PHPやって2年位経ちますが今まで無駄なコード結構書いていたなと思います…というかここでスコープ発生しないとなるとすごいわかりづらいよなぁという印象もあります。

ぐぐってみると同じこと言っている人多少見受けられたので勘違いしていた人も多いんではないでしょうか(と思いたい)。

 

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp

 

curlでサイト速度測定

サイト構築時になんだかレスポンスが遅いな?と思うことが合ってその際に手軽に測定できるスクリプトを作ったので記録しておきます。

上記スクリプトでURL部分を測定したいサイトに、for文の10を測定したい回数に変更すればOKです。

f:id:yyUX:20180221105617p:plain

上記画像のような結果が帰ってきます。httpステータス+秒数が帰ってきます。もちろんこのスクリプトは他人のサイトで動かすとdos攻撃になるので気をつけてください。IPブロックされても責任は取れません…

 

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp

VPSで動かしてるdockerのmysqldumpをAmazonS3にアップロードする

特殊なケースかもしれないし、こんなことやってるのはアホらしいかもしれないけどメモ的に記録しておきます。VPSで動かしてるubuntuサーバー上のmysql dockerコンテナのバックアップをs3にアップロードします。そもそもAWS使っておけばバックアップはホント楽なのに…といってもしょうがないのでやりました。

まずはubuntuaws cliを導入します。

導入にはpythonとpipが必要になります。pythonはもう入っていたのでpipのインストールからやりました。pipは

からインストールが可能です。そして本題のaws cliのインストールですが

でインストールします。インストールが終わったらaws cliの設定を開始します。その際にIAMのアクセスキーIDとシークレットアクセスキーが必要になります。取得方法はこちらにあります(というかpipの導入などもここにありますが…)

引用しておくと

1.IAM コンソールを開きます。
2.コンソールのナビゲーションペインで、[Users] を選択します。
3.IAM のユーザー名 (チェックボックスではありません) を選択します。
4.[Security credentials] タブを選択し、次に [Create access key] を選択します。
5.新しいアクセスキーを表示するには、[Show] を選択します。認証情報は以下のようになります。

アクセスキー ID: AKIAIOSFODNN7EXAMPLE
シークレットアクセスキー: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
6.キーペアをダウンロードするには、[Download .csv file] を選択します。このキーは安全な場所に保存してください。

 これはそのまんまなので特に迷うことはないはずです。もちろんここのアクセスキーなどはダミーです…

それで設定は以下のコマンドの実行です

実行すると上記アクセスキーIDとシークレットアクセスキーが聞かれますのでコピペ、あとはリージョンとoutput formatが聞かれますので、東京リージョンであれば「ap-northeast-1」、output formatはよくわかりませんがjsonでいいでしょう。

これでaws cliの設定は完了です。

 

dockerコンテナのmysqlのダンプの取得方法はこちらです。

日本語のところは適宜自分の環境に置き換えてください。最後のディレクトリ・ファイル名指定はなんでも構いません。バックアップファイルに日付を指定していますが、cronで定期実行する際はエスケープしないとちゃんと動かないので%をエスケープしております。

ここからあとはS3にアップロードするだけです 

 上記コマンドでアップロード可能なのであとは手動でやるなりcronでやるなりすればOKです。

 

私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。

yyux.jp