開発環境 $xcodebuild -version Xcode 15.2 Build version 15C500b 動作確認したシミュレータ: iPhone 15 Pro Max(iOS 17.2) モチベーション SwiftUIでviewの親と子それぞれに preference(key:value:) を指定すると、親のPreference値だけがその上位存在の onPreferenceChange(_:perform:) にて受け取ることができる。子の値も送りたい...。 import SwiftUI struct CustomPreferenceKey: PreferenceKey { typealias Value = [String] static var defaultValue: Value = [] static func reduce(value: inout Valu
はじめに プレゼンスライドを作る時、皆さんは何で作りますか? Keynoteでしょうか?それともPowerPoint? 僕も以前はPowerPointを愛用していました。 ただエンジニアをしている身としてはやはりコードでスライドを実装してみたいものです。 そんな思いに駆られてSwiftUIでプレゼンスライドが作れるSlideKitというライブラリを作りました。 この記事ではSlideKitの使い方を解説します。 基本的な使い方 セットアップ さて、まずはスライドを表示するアプリを用意する必要があります。 ここではSlideKitを使ったスライドアプリを生成するために、SlideGenを使います。 SlideGenはmintで簡単に使えるようになっています。 (ちなみにこのSlideGenも自分で実装しました) このコマンドを実行すると、スライドアプリのテンプレートがSlideKitPres
初めに アクセシビリティは開発で無視されがちですが、やり方がわかれば、アクセシビリティに配慮するのはそこまで難しいことではありません。 この記事ではアクセシビリティに配慮したアプリの作り方を例を交えながら説明します。 アクセシビリティに関して アクセシビリティの定義 この記事で言うアクセシビリティに配慮するというのは、スクリーンリーダー(TalkBack / VoiceOver)による読み上げと操作に対応することを指します。 正確に言えば、認識しやすい色の使い方や小さすぎない文字サイズなどもアクセシビリティに含まれますが、デザインに関わる部分はここでは取り上げません。 アクセシビリティの基本原則 1. 説明の文字がないかつ意味を持つ要素に対しては説明ラベルを指定する 説明の文字がないですが、その要素自体は意味を持つ場合は説明ラベル Android: contentDescription i
こんにちは。クックパッド事業部でiOSアプリの開発をしている新堀(@tk108gabalian)です。 iOS版のクックパッドアプリではスクロール時にコンポーネントが上部に固着する画面があります。 所謂StickyHeaderというやつです。 今回はそのStickyHeaderをSwiftUIで、かつTabViewを使用つつ実現する方法について紹介します。 導入の背景 2022年7月にリリースした「のせる」画面には以下の要件がありました。 画面上部にユーザー情報を表示する。 ユーザー情報の下にタブを表示する。 タブをタップするか、タブより下を横にスワイプすることでタブの切り替えが可能。 画面全体をスクロールできるが、ユーザー情報が隠れるまでスクロールしたら画面上部にタブが固着し、以降はタブより下の部分のみスクロールする。(逆方向にスクロールする場合は再度ユーザー情報が表出する。) また、事
UIKitの場合は適切なタイミングでUIView.frameから取得できるし、Auto Layoutで制約つけていれば、具体的なframeを取得しなくても、大体な目的は達成できます。SwiftUIの場合はGeometryReaderで親ビューのframeを取得することは可能ですが、子ビューのframeを取得するに別の手法が必要です。 親の方に情報伝達 直接に子ビューのframeを取得することができませんので、子ビュー側で取得してから親に伝達する必要があります。 子の方に伝達するにはenvironmentという仕組みで、逆方向の場合はpreferenceという仕組みがあります。 Preferenceを使うにはPreferenceKeyを実装する必要があります。 struct FramePreferenceKey: PreferenceKey { static var defaultValue
Articles, podcasts and news about Swift development, by John Sundell. One really powerful aspect of SwiftUI’s overall API is that it enables us to draw things like shapes, gradients, and colors the same way that we render views and UI controls. For example, if we wanted to render a button shaped as a rounded rectangle, then we could do so by assigning a RoundedRectangle shape as our view’s backgro
I'm trying to code a simple login page on my app. I started using SwiftUI on my newly updated macOS Catalina. The Apple documentation is still lacking a lot. I need to center a VStack vertically on a Scrollview occupying the whole page with a "limit" on it's width of 400. Something like this: ScrollView(.vertical) { VStack { Text("Hello World") } .frame(maxWidth: 400, alignment: .center) } It was
StateObject は初期値が必要ですが、大抵そのタイミングでは Environment から正しい値を読むことはできません この記事で紹介する LazyStateObject を利用するとその問題を解消できます 👌 LazyStateObject を利用したサンプルコードは以下の通りです import SwiftUI struct Dependency: DynamicProperty { @Environment(\.networkClient) var networkClient @Environment(\.storageClient) var storageClient } @MainActor class ViewModel: ObservableObject { let dependency: Dependency @Published var count = 0 in
こんにちは、iOSエンジニアの @motoshima1150 です。 iOSDC Japan 2021の「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。のトークセッションで収まりきれなかったTipsを紹介いたします。 はじめに 本記事では、Spotlight機能の実装方法について紹介します。 Spotlight機能とは、アプリのチュートリアルなどで画面はそのままに一部分を切り抜いた半透明Viewを重ねてユーザーの次の行動を促すことができる機能を指します。 要件としては次の要件を想定しています。 全画面を覆ったViewで任意の箇所を透過させたい 利用イメージ 例として、1と番号が振られたViewを明るく、それ以外の部分を暗く表示させるイメージです。 実装のステップは大きく2つに分けて説明します。 切り抜き用のFrameを取得する 指定した形にViewを切り抜く 切り
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く