タグ

ブックマーク / akisute.com (10)

  • UIWebView, WKWebView 等において Drag and Drop を禁止する方法

    iOS 11よりDrag and Drop APIUIKitに追加され、UITextView / UITableView / UICollectionViewに簡単にDrag and Dropを実現するためのdelegateが用意されたり、それ以外のUIViewにもDrag and Dropをハンドリングするための仕組みが用意されました。このDrag and Dropは基的にはアプリをまたいでデータを受け渡しすることを前提として作られていますが、一応は自分のアプリ内でデータを移動したりコピーしたりするためにも使えるようになっているので、積極的に活用していきたいところです。 ところでこのDrag and Drop、基的にはアプリ側が対応しない限り自動的には対応してくれないのですが、例外があります。それがUIWebView / WKWebView / SFSafariViewContro

    UIWebView, WKWebView 等において Drag and Drop を禁止する方法
  • Auto Layout と Manual Layout を混載させるときに役立つ UIView.translatesAutoresizingMaskIntoConstraints プロパティの話

    Auto LayoutがiOS 6で導入されてはや4年、未だによく理解していなかった挙動に UIView.translatesAutoresizingMaskIntoConstraints があります。このプロパティは自分がプログラムコード上で生成したviewをAuto Layoutするときにfalseにする必要があるものということで皆様記憶されているかと思うのですが、具体的にこのプロパティは何をやっているのかが個人的に全く謎でした。それが今日一つ謎が解けましたのでここに共有させていただきたいと思います。 UIView.translatesAutoresizingMaskIntoConstraintsの値がtrueのときとfalseのときの違いについて以下に記載します(iOS 8以上で確認しています)。 trueのとき 対象のviewのframe、すなわちx, y, width, heig

    Auto Layout と Manual Layout を混載させるときに役立つ UIView.translatesAutoresizingMaskIntoConstraints プロパティの話
  • Q. ATS を Debug ビルドでだけ無効にしたいのですが...

    A. こちらの内容に従えば一発です。 http://stackoverflow.com/a/32704702 要するにBuild Phaseにビルドスクリプトを追加してそこでPlistBuddyを使って値を書き換えましょうと言う作戦です。 もうちょっとマシな解説 http://stackoverflow.com/questions/1832157/setting-a-boolean-property-in-info-plist-from-a-user-defined-setting 普段、Info.plistの設定内容をConfiguration毎に書き換えたい場合は、たいていよくやるのがxcconfigファイルを以下のように用意して、 APP_BUNDLE_NAME = MyApp_Dev でもってInfo.plistに対して Bundle Display Name = ${APP_BU

    Q. ATS を Debug ビルドでだけ無効にしたいのですが...
  • iOS でヒラギノフォントが明示的に指定された時に描画サイズの計算が正しくならない問題を修正する

    タイトルからして出落ち感が少々ありますが・・・ iOSのフォントサイズ計算には長年修正されないバグというか仕様がございまして、「ヒラギノフォント(ヒラギノ角ゴシック、ヒラギノ明朝等)」が明示的に[UIFont fontWithName:size:]で指定されたとき、そのフォントを使ったUILabelやUITextViewなどの描画サイズの計算が正しくならない問題があります。iOS 6からiOS 9.1現在に至るまでずっとなので今後も直ることはないと思います。 詳細についてはこちらの記事が詳しいです。 http://qiita.com/yusuga/items/2be8c55ca561bba44702 一番下のリンク先の記事でも同様の問題が訴えられていまして、それぞれ対策が記載されていますので合わせてご参照ください。 でまぁ、対処法としてはいくつかあります。 UIControl.conten

    iOS でヒラギノフォントが明示的に指定された時に描画サイズの計算が正しくならない問題を修正する
  • Apple Push Notification で送られてきた通知を通知センターから消すたった一つの方法

    いや、それがたった一つしか方法ないのはさすがにどうかと思うのですが。 皆さんもiOSのアプリを使っていて、通知を受け取った後にアプリを開いても通知センターから通知が消えず地味にイライラする現象に見舞われたことがあるのではないかと思います。私もお恥ずかしながらつい最近知ったのですが、実はこれアプリ側で何も対応しないと通知センターから通知は消えません。それどころかなんと通知センターからプッシュ通知を消すためのAPIも一切提供されていません。つまり普通にアプリを作ると通知センターから通知が消えないのです。Appleふざけんな ※注記: ここで私が消せない通知と呼んでいるものはApple Push Notification経由でのRemote Notiifcationです。UILocalNotificationは自由自在にアプリ側から消せるので、適切なタイミングで消してないのは単なる実装者の怠慢と

    Apple Push Notification で送られてきた通知を通知センターから消すたった一つの方法
  • Spark Inspectorを一ヶ月ほど使ってみた感想

    ちょっと仕事で複雑なiOSの画面を作りたいということになり、デバッグに難儀していた所、Spark InspectorというiOS向けのランタイムインスペクタツールが発売されていましたので、やや乗り遅れた感がありますが私も早速試してみました。 Spark Inspectorを使うと、 リアルタイムにViewの構造を視覚的に確認し、直接プロパティの値を編集してアプリに反映させることができる Webエンジニアの人にわかりやすくたとえるならば、ChromeやFirefoxなどに付いているインスペクタをiOS上で使えるようなものです その他、アプリ内を飛び交っているNSNotificationの状態を監視することができる(らしい) 既に試された方のブログ記事で導入方法など詳しく公開されていますので、まずはそちらを見ていただくのが良いかと思います。 Spark Inspectorを導入してみた htt

    Spark Inspectorを一ヶ月ほど使ってみた感想
  • Mac の Skype のデータベースを最適化してパフォーマンスを向上させる小技

    もりよしさんにSkypeで教えてもらったのですが、Mac版のSkypeクライアントってデータベースにsqlite3を使用しているんですね。少なくとも3年前には既に知られているネタみたいなのですが、ぜんぜん知りませんでした。 http://d.hatena.ne.jp/shishimaruby/20101214/1292288183 というわけで、Mac版のSkypeをお使いの方は ~/Library/Application Support/Skype/(自分のアカウント名)/ 以下にsqlite3のデータベースファイルがあるので、Skypeを一度終了した状態で sqlite3 main.db VACUUM sqlite3 main.db REINDEX という感じでVACUUMとREINDEXを実行すると劇的にパフォーマンスが改善します。特に仕事とかで大量のログを見ている方におすすめです。

  • 静的ライブラリ中のシグネチャが衝突してビルドできないときに再ビルドしないでシグネチャを書き換える

    これはビルド時に同一プロジェクト内に同じ名前のシグネチャの関数やクラスが存在するためリンクができなくて失敗しているというエラーです。特に以下のようなケースでよく発生します。自分が作ったクラスや関数の名前と、外部から持ってきたライブラリが使っているクラスや関数の名前が衝突している 外部から持ってきたライブラリ同士でクラスや関数の名前が衝突している 外部ライブラリをインストールする際に、-all_loadしたり-ObjCしたりている そういうわけで、外部からライブラリをたくさん導入すると、base64やMD5など、プログラム上でよく使われるのに標準で用意されていないライブラリがよく衝突してしまうわけです。大抵の場合はぶつかっているシグネチャの名前をソースコード上でちょっと書き換えて再度ビルドすることで回避ができるのですが、極稀にソースコードを書き換えることができないケースが存在します。以下にそ

    静的ライブラリ中のシグネチャが衝突してビルドできないときに再ビルドしないでシグネチャを書き換える
  • UIWebView.scrollView に対して KVO を使うと色々面白い

    iOS 5より、UIWebViewにscrollViewプロパティが追加され、たとえばスクロールを無効にしたりステータスバーをタップしても一番上に戻らないようにしたりなど、UIWebViewのスクロール周りの処理を外から自由に触れるようになりました。ですが便利なのはこれだけではありません。KVOの仕組みを使うことで、さらにUIWebViewを便利に使うことができます。ここでは私が使っている中で一番のおすすめをご紹介します。 ■UIWebViewの描画しているHTMLのcontentSizeを非同期的に、リアルタイムで取得する UIWebview.scrollViewのcontentSizeプロパティは、UIWebViewの描画しているHTMLの大きさ(contentSize)と同じ値になります。この性質を利用して、contentSizeプロパティにKVOを貼ると、UIWebViewの描画し

  • iOS 5の日本語キーボードの高さに対応する (iOS 3, 4, 5全対応)

    iOS 5より日語キーボードの高さが変わっているので、今まで決め打ちで高さ216pxとかやってレイアウトしていたビューが軒並み使えなくなってしまいました。今後はキーボードが出たり引っ込んだり種類が切り替わったりのタイミングできちんとキーボードの大きさを調べて適切にビューをレイアウトしてやる必要があります。ということでその対応をしたのでメモ。 前提条件として、以下の要件を満たすように作りました。iOS 3, 4, 5全てで正常に動作すること。iOS 3.0でも動作しなければならない。 キーボードのframeを適切に取得できること キーボードが出てくるタイミング、消えるタイミング、キーボードの種類が変わるタイミング、全て取れること ■まずはログを見てみる キーボードの動作のタイミング、およびキーボードのframeは、NSNotificationを使って取得することができます。使用するNoti

  • 1