タグ

ブックマーク / dev.classmethod.jp (39)

  • SwiftUIでSearchBarが使いたいので自作する | DevelopersIO

    SwiftUIUISearchBarのようなものが使いたかったので自作することにしました。 環境 Xcode 13.3 はじめに 2022年4月時点でSearchBarというようなViewはSwiftUIの標準では存在しておりません。その代わりiOS 15以降ではsearchable(text:placement:)というモディファイアを使うことができ、SearchBarのような動きをしてくれます。 iOS 15からという条件もそうなのですが、2022年4月22日時点ではBetaの記載があり、またこのモディファイアはNavigationViewをラップしなければ表示できません。 NavigationView無し struct ContentView: View { @State private var searchText = "" var body: some View { Text(

    SwiftUIでSearchBarが使いたいので自作する | DevelopersIO
    mntone
    mntone 2023/12/07
  • 【iOS】SwiftでQRコードを表示して目で読んでみた | DevelopersIO

    大阪オフィスの山田です。SwiftQRコードを表示してみました。それと、おまけとしてQRコードを目で読む方法について調べてみたので書き留めておきます。 開発環境 Xcode 11.1 macOS 10.14.6 SwiftQRコードを表示する 以下のような画面を用意しました。上のtextFieldにQRコードにする値を、下のtextFieldには誤り訂正レベルを入力します。 textが更新されるたびに、QRコードを生成して画面に表示します。 ソースコードはこちら。 class QRCodeViewController: UIViewController { @IBOutlet weak var messageTextField: UITextField! @IBOutlet weak var correctionLevelTextField: UITextField! @IBOutle

    【iOS】SwiftでQRコードを表示して目で読んでみた | DevelopersIO
    mntone
    mntone 2021/11/05
  • [Swift] 文字列の長さの取得についての検証 | DevelopersIO

    はじめに モバイルアプリサービス部の中安です。 「文字列の長さ」とは、Swiftに限らず様々な言語で当たり前のように使いますが、 そのいずれも簡単なように見えてややこしく、容易そうに見えて困難です。 それは常に「Unicode」や「マルチバイト」、はたまた「書記素」などの問題が孕むからです。 Swiftもまたバージョンが変わるごとに文字列の扱いが変遷してきました。 その度に文字列がコレクションになったりならなかったりという迷いもこういった事情が絡んでるからなんだろうなと思います。 ただし、この記事ではそういう学術的な深い話はしません。 もちろんある一定の理解は必要かと思いますが、実際のアプリ開発でさっと手に入れたいのは「人が文字を見て数える文字数」かなと思います。 ですので、今記事は何個かの文字列長取得の方法と、その正確性と速さの検証を掲載し、実際にアプリに実装するならどのような方法がある

    [Swift] 文字列の長さの取得についての検証 | DevelopersIO
    mntone
    mntone 2021/11/02
  • Swift5.1から使えるOrdered Collection Diffingについて | DevelopersIO

    Swift5.1から導入された機能の一つにOrdered Collection Diffingというものがあります。 WWDC2019ではAdvances in Foundationというセッションで紹介されています。 Ordered Collection Diffingについて Ordered Collection Diffingを使用すると2つのコレクションの差分を計算して何がどう変わっているのかを知ることができます。 この機能の主役になるのはCollectionDifference<ChangeElement>です。 実装はSwiftで行なわれているのでSwiftを書いたことがあればアルゴリズムの実装の部分を知らなくてもそれほど複雑に感じないAPIです。 CollectionDifferenceは差分を保持していて、差分はコレクションのどの要素が削除されてどの要素が追加されているのか

    Swift5.1から使えるOrdered Collection Diffingについて | DevelopersIO
    mntone
    mntone 2021/10/29
  • [iOS] 遷移元の画像が遷移先にズームイン・アウトするような画面遷移(UITableView及びUICollectionViewの場合) | DevelopersIO

    [iOS] 遷移元の画像が遷移先にズームイン・アウトするような画面遷移(UITableView及びUICollectionViewの場合) 2 画面遷移のカスタマイズ present modallyで画面遷移をカスタマイズする手順は、下記のとおりです。 遷移を表現するクラスを作成 UIViewControllerAnimatedTransitioning 1.を指定するdelegateクラスを作成 UIViewControllerTransitioningDelegate 遷移先ビューのtransitioningDelegateに、2.を設定する 今回は、1.及び2.を実装したクラスCustomTransitionを作成しました。 class CustomTransition: NSObject, UIViewControllerTransitioningDelegate, UIViewC

    [iOS] 遷移元の画像が遷移先にズームイン・アウトするような画面遷移(UITableView及びUICollectionViewの場合) | DevelopersIO
    mntone
    mntone 2019/08/29
  • 遷移元のビューが透過で見えるモーダルビュー(UIPresentationControllerを使わないで、既存の画面遷移をいじる感じで実装してみました) | DevelopersIO

    1 はじめに iOS 8以降で利用可能な、UIPresentationControllerを使用すると、ViewControllerのモーダルのような画面を自由に表示することが可能です。 [iOS 8] UIPresentationController でカスタムのモーダル表示を実装する 今回は、あえて、UIPresentationControllerを使用せず、通常の画面遷移の実装を修正していくことで、このようなバックを透過させたモーダルビューを幾つか試してみたいと思います。 題材としては、次のようなUICollectionViewから選択した画像を、モーダルビューで拡大表示するというような、簡単なサンプルを用意しました。 2 半透明 バックを半透明にして、遷移元のビューが見えるような表現と言うことで、とりあえず、遷移先のビューのbackgroundColorのalpha値を変更します。

    遷移元のビューが透過で見えるモーダルビュー(UIPresentationControllerを使わないで、既存の画面遷移をいじる感じで実装してみました) | DevelopersIO
    mntone
    mntone 2019/03/12
  • [iOS 7] 追加された画像フィルタ郡 (1) だれでも作れるお手軽写真加工アプリ | DevelopersIO

    iOS7で、かなり多くの画像フィルタ機能が追加・改修されています。 その中でも多規模にわたっているのが、写真を編集したようなフィルタ郡です。 よく、写真を撮影した後に加工してTwitterやFacebookに投稿、なんてアプリがありますね。 あれが、超手軽にできるようになっています。 ここでは、その手法をご紹介します。 前提条件 まずは、今回の加工する前のオリジナルの写真です。 9月1日に鷲宮神社で行われた土師祭の時の写真です。 このままでも非常に良い写真なのですが、これをいろいろなフィルタを使って加工していきましょう。 基的には、この画像をUIImageViewに表示させて、もう一つのFilterをかけたものと見比べるといったことをしています。 画像のソースコードは以下のようになっています。 #ViewController.h @property (weak, nonatomic) I

    [iOS 7] 追加された画像フィルタ郡 (1) だれでも作れるお手軽写真加工アプリ | DevelopersIO
    mntone
    mntone 2019/03/05
  • [Swift 3.0] アクセス修飾子にopenとfileprivateが追加された話 | DevelopersIO

    また、現時点でのSwift3の仕様では、openを利用するには、スーパークラスもopenでないといけません。 モジュール(module)とは? ライブラリなどimportを使って取り込むまとまりです。 UIKitMapKit、CoreData、CoreImageなどが該当します。 Swift2.x(今までの例) UIViewController public class UIViewController : UIResponder, NSCoding, UIAppearanceContainer, UITraitEnvironment, UIContentContainer, UIFocusEnvironment { // 一部抜粋 public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) p

    [Swift 3.0] アクセス修飾子にopenとfileprivateが追加された話 | DevelopersIO
    mntone
    mntone 2019/01/28
  • [Swift] Swinjectを使ったDependency Injection | DevelopersIO

    はじめに こんにちは。 最近生後7ヶ月の娘を見た人から「眉毛が垂れててお父さんそっくりですね〜」と言われるのが定番になっている加藤です。 さて、今回はSwiftのDIフレームワークであるSwinjectの話です。 DIとは DIはDependency Injectionの略で、日語では「依存性の注入」と訳されます。 「DIとは何か」を説明した記事は山ほどありますが、ここでは一番端的に表現している記事を見つけたので引用します。 “依存性注入とはインスタンス変数にオブジェクトを与えるということです。当にただそれだけです。” - James Shore Swiftにおける現実的なモックより引用。 つまり、あるオブジェクトが依存しているオブジェクトを外から渡してあげることを意味します。 依存しているオブジェクトを中で作らずに外から渡してあげることで、オブジェクト同士を柔軟に組み合わせることが可

    [Swift] Swinjectを使ったDependency Injection | DevelopersIO
    mntone
    mntone 2019/01/20
  • [iOS] Bitriseを導入する手順について | DevelopersIO

    はじめに こんにちは。モバイルアプリサービス部の平屋です。 前回の記事「fastlaneを導入する手順について」に引き続き、iOSアプリの配布に関する手順を紹介します。 記事では、前回の記事で作成したレーンをBitrise(CI/CDサービス)上で動作させるための手順を紹介します。 Bitrise | Bitrise - Mobile Continuous Integration and Delivery - iOS & Android Build Automation 検証環境 Bitrise Stack Xcode 10.0.x, on macOS 10.13 (High Sierra) 目次 アカウントを作成する アプリを追加する ビルドを確認する 証明書/プロファイルを追加する 再ビルドする 前提条件 リポジトリはGithubのPrivateリポジトリを使用する 「アプリをAd

    [iOS] Bitriseを導入する手順について | DevelopersIO
    mntone
    mntone 2019/01/12
  • 【iOS】UIFontをアプリケーションで一括設定しつつ、個別でフォントを分ける方法 | DevelopersIO

    こんにちは! 先日、ヤフー VS クラスメソッドでiBeaconの運用について発表を担当させて頂きました、荒川です。 協力して下さった大橋さんや諏訪さんをはじめとしたクラスメソッドのメンバー、また観客の方々にも恵まれて無事インターン生対決を勝利する事が出来ました。 いいね!を押して下さった方、当にありがとうございました! 話しは変わって、以前はゲームアプリを作る事が多く、UIKit関連やStoryboardはほとんど触っていませんでしたが、最近やっと慣れてきました。 それで、アプリで使うフォントを一括で設定したくなり、UILabelのappearanceで設定しようと思ったらハマったのでまとめます。 iOS 7で利用頻度の増えたappearance ご存知の通り、iOS 7からステータスバーやナビゲーションバーの背景がデフォルトで透過になり、フラットデザイン化の流行にも合わせてtintC

    【iOS】UIFontをアプリケーションで一括設定しつつ、個別でフォントを分ける方法 | DevelopersIO
    mntone
    mntone 2019/01/11
  • #cmdevio2016 (レポート: B-3) Swiftで書かれたコードのパフォーマンス・チューニング | DevelopersIO

    記事ではDevelopers.IO 2016 セッションB-3でRealm 岸川克己氏に発表いただきましたSwiftで書かれたコードのパフォーマンス・チューニングのレポートをお届けします。 はじめに 今回しない最適化の話 アルゴリズム メモリ 言語機能をつかった最適化の話をします。 自己紹介 Realmで働いています。 是非この後もRealmについて聞きに来てください。 SQLiteより高速で使いやすいです。 最適化の前に 早すぎる最適化は諸悪の根源である(Knuth先生: Art of computer Programming の著者) 最適化の前に計測する 可読性とのトレードオフ UITableViewとかでキャッシュをクリアするとかもあるある ソフトウェア 80 / 20 ルール (20%の実行コードが80%の実行時間を占めている) ありとあらゆるところを最適化しても効果は得られな

    #cmdevio2016 (レポート: B-3) Swiftで書かれたコードのパフォーマンス・チューニング | DevelopersIO
    mntone
    mntone 2019/01/09
  • [iOS] ユニットテストの始め方 〜 テスト環境の作り方とXCTestの使い方 〜 | DevelopersIO

    はじめに おばんです、あまりにもWebがわからなくて、知り合いのWebエンジニアに聞いたら嘘のようにすっきり理解できた田中です。調べてもわからないことは詳しい人を頼るとうまく返してくれるんだなあとありがたい想いでいっぱいです。 さて今回の記事は、最近テストについて学び始めたのでiOSでテストを始めるために最初に知っておかなければならない環境の作り方とXCTestに関する簡単な内容をまとめます。 検証環境 Xcode 8.2.1 テスト環境の作り方 テストターゲットの追加 プロジェクト作成時の指定方法 プロジェクトを作成する際に、テストターゲットも一緒に作成する場合は下の画像の Include Unit Test にチェックを入れてプロジェクトを作成します。 後からテストターゲットを追加する方法 既存のプロジェクトに後からテストターゲットを追加する場合は、 Xcode > New > Tar

    [iOS] ユニットテストの始め方 〜 テスト環境の作り方とXCTestの使い方 〜 | DevelopersIO
    mntone
    mntone 2019/01/08
  • [iOS 7] Xcode 5 で始める Auto Layout 入門 #3 – 制約編 | DevelopersIO

    様々な制約 今回は、Auto Layout で利用する様々な種類の制約について、Interface Builder の Canvas 上で確認していきたいと思います。 制約ボタンその1 まずは、Canvas 右下にあるボタン群の中の一番左側のボタンから見て行きましょう。このボタンをクリックすると、下図の様なメニューが表示されます。 これらは、コンポーネントのアライメントに関する制約を追加・編集するための機能です。上から順番に機能を確認していきましょう。 アライメント(端揃え) Leading Edges 複数のコンポーネントの Leading 側(日語環境では左)端の水平位置を揃える制約を追加します。追加される制約はコンポーネント同士の間の Leading Alignment です。 Trailing Edges 複数のコンポーネントの Trailing 側(日語環境では右)端の水平位

    [iOS 7] Xcode 5 で始める Auto Layout 入門 #3 – 制約編 | DevelopersIO
    mntone
    mntone 2019/01/05
  • [Swift] 爆速計算ライブラリ Surge を使う | DevelopersIO

    Accelerate.Framework + Swift Accelerate フレームワークは線形代数の計算を始めとし、音声、信号処理に応用の効くフーリエ変換や画像処理などでハイパフォーマンスな計算処理を提供します。 このフレームワーク内では OS X / iPhone で用いられている Intel, ARM などの CPUSIMD 命令を用いて計算が最適化されています。 Accelerate フレームワーク自体は iOS のフレームワークのなかでも比較的低レイヤな位置づけであるため、フレームワークを直接叩くような実装を開発者が行うことはまれです。 とはいえ、重量級の計算をアプリケーションのロジック部で行う際に、SIMD による最適化の恩恵が得られるにも関わらず、それを行わないのは宝の持ち腐れと言えます。 Surge はこの低レイヤな位置づけにある Accelerate フレームワ

    [Swift] 爆速計算ライブラリ Surge を使う | DevelopersIO
    mntone
    mntone 2019/01/01
  • [iOS] ディープリンク(Custom URL Scheme)でアプリを起動する | DevelopersIO

    1 はじめに ディープリンクとは、アプリの特定の画面に遷移(遷移先のアプリ側で実装が必要です)させることのできるリンクのことです。 iOSでは、 cm-app:// のような、アプリ固有の Custom URL Scheme を実装することで、これを実現できます。 ディープリンクを使用すると、スキーム(上記の例ではcm-app)でアプリを識別して起動できます。また、//以降のURL部分でアプリに対して情報を受け渡すことや、Webページからだけでなくアプリ間の遷移にも応用できます。 なお、ディープリンクは、あくまでアプリがインストールされている場合にのみ利用可能な機能であり、Universal Links(iOS9以降で利用可能)などとは、違いますのでご注意下さい。 参考:URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現

    [iOS] ディープリンク(Custom URL Scheme)でアプリを起動する | DevelopersIO
    mntone
    mntone 2018/12/29
  • CocoaPodsによる、外部ライブラリの利用と作成 | DevelopersIO

    CocoaPodsとは CocoaPodsとは、定番のCocoaの依存管理マネージャーです。アプリ開発で煩雑となりがちな外部ライブラリの管理を、簡単な記述とコマンドだけ支援するものです。 https://cocoapods.org/ ざっくりと外観してしまうと・・・CocoaPodsは、Podfileに記述されたライブラリを、メタ情報をもとにダウンロードし、それらをまとめたPodsプロジェクトを生成します。 そして、ワークスペースの仕組みを利用して、既存のプロジェクトから、これを参照できるようにしています。 以下、動作について詳しく見ていきます。 2 インストール及び管理情報 (1) インストール Macには、あらかじめRubyがインストールされているため、下記のコマンドでインストールできます。 $sudo gem update --system <=ruby gemを最新にする $sud

    CocoaPodsによる、外部ライブラリの利用と作成 | DevelopersIO
    mntone
    mntone 2018/12/25
  • [Android Tips] SDK 内の Drawable リソースが一覧できる「Android Drawables」が便利! | DevelopersIO

    Android Drawables 「Android Drawables」は SDK 内の Drawable リソースが一覧できる Web ツールです。 社内で共有してもらい、とても便利だったのでご紹介したいと思います。 SDK 内の Drawable リソースが種類ごとに一覧できます 使いかたはシンプルです。Drawable の種類リストから見たい種類を選ぶだけです。 Drawable を一覧で見てみる ということでそれぞれの種類ごとに一覧してみました。 Buttons ボタンに使われている Drawable です。CheckBox や RadioButton なども含まれています。 Dialog ダイアログのアイコンに使われている Drawable です。 Emoticons (絵文字) いわゆる絵文字です。かわいいですね! Menu メニューに使われている Drawable です。3

    [Android Tips] SDK 内の Drawable リソースが一覧できる「Android Drawables」が便利! | DevelopersIO
    mntone
    mntone 2018/06/25
  • [iOS] アプリ内課金 正常系メッセージの一覧 | DevelopersIO

    1 はじめに アプリ内課金のプログラムは、タイプによって、動作や実装方法も少し変わってくるので、慣れないと少しややこしいと思います。また、ちょっと試験するにも、iTunes Connectへの登録や、課金プロダクトの作成などが必要で簡単に試せないのが辛いです。 今回は、正常系を整理するという意味で、正常動作している場合に表示されるメッセージについてまとめてみました。 なお、画面に、[Environment: Sandbox]と表示されている文字は、試験用サンドボックスで実施しているため表示されているものであって、番環境では表示されません。 2 消耗型 何度でも購入できるため、毎回同じメッセージとなります。 (1) 初回も2回目以降も同じ

    [iOS] アプリ内課金 正常系メッセージの一覧 | DevelopersIO
    mntone
    mntone 2018/06/20
  • [iOS 8] UIAlertView と UIActionSheet が deprecated になった | DevelopersIO

    UIAlertController iOS8 からは UIAlertView, UIActionSheet が deprecated となり、替わりに UIAlertController という新規のクラスを使うことが推奨されました。 これらの違いを一言で説明すると、 ボタンがタップされた時の処理を UIAlertView, UIActionSheet はデリゲートメソッドで実装する UIAlertController はブロックで実装する となっています。 サンプルコード(アラート) 実行時の画面 従来のコードで記述 アラート表示処理 [[[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK

    [iOS 8] UIAlertView と UIActionSheet が deprecated になった | DevelopersIO
    mntone
    mntone 2018/06/05