TAAT

ソフトウェアエンジニア / iOS開発がメイン / iOSDC Japan 2023に…

TAAT

ソフトウェアエンジニア / iOS開発がメイン / iOSDC Japan 2023に登壇しました / Unity開発をはじめました / メタバースでワールド巡り / VRoidアバター

最近の記事

SwiftUIでカスタムなSegmentedControlを実装する

SwiftUIでSegmented Controlを使おうとすると、PickerにSegmentedPickerStyleを適用すれば一番楽だが、細かくデザイン調整しようとすると現状UISegmentedControl.appearance()を指定するしかなく、調整できる要素も少ないのが難点。そこで自前でカスタムなSegmented Controlを実装してみた。 Pickerで実装する場合Pickerの場合、selectionに選択中の要素を渡して、pickerStyl

    • SwiftUIのScrollViewでスクロール量を取得してViewを操作する

      SwiftUIで開発していると、ScrollViewからスクロール量を取得してViewを操作したい(動かしたり、opacityを変更したり、表示・非表示させたり)ケースが時々あるが、現状UIKitと違ってSwiftUIにはスクロール量を取得する方法はなく、力技でやるしかなさそう。 ScrollViewでスクロール量を取得するUIKitであれば、UIScrollViewDelegateのscrollViewDisScroll(_:)でcontentOffsetを取得して処理す

      • クラスターに入社してもうすぐ1年

        この記事はクラスター Advent Calendar 2023 シリーズ2 18日目の記事です。 昨日はMatchaChoco010さんの「clusterで無理やり四足歩行するアバターを用意する」でした。四足歩行するアバターの作り方を動画で詳しく紹介してくれているので、興味のある方はぜひチャレンジしてみてください。 こんにちは。クラスター株式会社でソフトエンジニアをしているTAATです。私は今年1月にクラスターに入社して、あっという間に1年が経とうとしています。この1年間

        • バーチャル空間で仕事してみた

          リモートワーク中心のワークスタイルになってから、自分にとって快適なデスク環境を追求するようになって、MacBook Pro + スタンド + キーボード・マウスでやっていたのを、モバイルモニターで拡張してみたり、モニターアームでメイン・サブモニターを設置してみたりしてきたが、今回はデスク環境をバーチャル空間で構築することにチャレンジしてみた! 現状のメイン・サブモニター環境でもそれなりに快適だが、モバイルモニターをそのままサブモニターとして流用しているので、サイズが小さかっ

        SwiftUIでカスタムなSegmentedControlを実装する

          iOSエンジニアがUnityに入門してみた

          Unityとは?UnityはUnity Technologiesが提供するゲームエンジンで、開発環境や実行環境もあり、2Dや3Dゲームを手軽に開発することができる。アセット(素材)ストアが充実していて、ドキュメントや情報も豊富で、初心者がゲーム開発を始めやすいと言われている。League Of Legendsや原神、ポケモンGoなどの有名タイトルで採用されている。 ゲームエンジンというと、Epic GamesのUnreal Engineも非常に有名で、グラフィックが高品質で

          iOSエンジニアがUnityに入門してみた

          SwiftUIでTextの中にImageをインラインで表示する

          SwiftUIでアイコン画像とテキストを組み合わせて表示するには、HStackやLabelが使われることが多いが、今回は次のようにTextの中にImageをインラインで表示する方法を紹介する。 インラインでImageを表示するTextにはImageから初期化するイニシャライザがあり、他のTextと連結して画像を表示することができる(公式ドキュメント)。 // Textを結合してインラインでImageを表示(Text(Image(systemName: "book.fill

          SwiftUIでTextの中にImageをインラインで表示する

          visionOSで部屋の中に雪を降らしてみた

          今回はこちらの記事を参考にして、Reality Composer Proでパーティクルを作成して、シミュレーターの部屋の中に雪を降らしてみた。 プロジェクト作成今回は初期状態でVolumeでRealityViewを表示するので、プロジェクト作成時のInitial SpaceでWindowではなくVolumeを選択する。 ContentViewでは生成されたRealityKitContentからデフォルトのSceneを読み込んでRealityViewで表示するだけ。 @ma

          visionOSで部屋の中に雪を降らしてみた

          visionOSでImmersiveSpaceにオブジェクトを表示してみる

          前回の記事では3DオブジェクトをWindowやVolumeで表示したが、今回はより没入感のあるImmersiveSpaceにオブジェクトを表示してみる。 Immersive Spaceを表示するテンプレートからプロジェクトを作成して、App構造体にImmersiveSpaceを追加しておく。今回は完全な没入型にしたかったので、FullImmersionStyleを指定。 @mainstruct ImmersiveSpaceSampleApp: App { var b

          visionOSでImmersiveSpaceにオブジェクトを表示してみる

          visionOSで3Dオブジェクトを表示する

          前回の記事ではvisionOS SDKを試してみたが、今回はvisionOSで3DオブジェクトをWindowやVolumeで表示してみた。 ButtonタップでVolumeに3Dオブジェクトを表示visionOSのテンプレートからプロジェクトを作成すると、WindowでNavigationSplitViewを表示するコードが生成されるが、以下のように書き換えておく。 App Structに新たなWindowGroupを追加して、Model3Dを表示するViewを定義し、V

          visionOSで3Dオブジェクトを表示する

          visionOS SDKが公開されたので試してみた

          WWDC 2023で発表されたvisionOSのSDKが公開されたので、早速インストールしてサンプルコードで触って、個人開発AppをVision Proのシミュレーターで動かしてみた。 WWDC 2023で待望のApple Vision Proが発表されて、空間コンピューティングの時代が来た!と盛り上がり、体験レポートを観れば観るほど欲しくなってくるが、デベロッパーとしてはvisionOSにはどう対応すればいいかが気になる。 セッションを視聴しながらSDKの公開を待っていたが

          visionOS SDKが公開されたので試してみた

          SwiftUIでTruncated Text

          SwiftUIにはlineLimitというモディファイアがあり、テキストが表示できる行数を制限することができ、省略される場合は末尾に...が表示されるが、...Moreのように任意の省略文字を指定できない。 そこで今回はこちらの記事を参照にして、省略文字やそのスタイルを任意指定できるようにしてみた。 struct ContentView: View { let text = "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所

          SwiftUIでTruncated Text

          SwiftUIでImageをピンチイン・ピンチアウト・ダブルタップでズームさせる

          SwiftUIで写真Appのように、Imageをピンチイン・ピンチアウト・ダブルタップでの操作を実装してみた。 実装Imageのピンチイン・ピンチアウトジェスチャーはMagnificationGestureを利用し、onChangedで拡大率を取得できるので、scaleEffectに渡すことでViewを拡大できる。また、ダブルタップはTapGesture(count: 2)を使って、onEndedで拡大・縮小後のスケールを同じようにscaleEffectに渡せばよい。 そし

          SwiftUIでImageをピンチイン・ピンチアウト・ダブルタップでズームさせる

          SwiftUIでSkeleton Screenを作る

          最近YouTubeやSlackなどのアプリでよく見かけるSkeleton Screen(ローディング中のプレースホルダー表示)をSwiftUIで実装してみた。 Skeleton Screenとは?Skeleton Screenとは、ローディング中に表示される骨組みのようなデザインのことで、スピナーと比べるとどんなコンテンツが表示されるのかがわかりやすいため、ローディング中の心理的負担が軽減されると言われている。また、シマーアニメーションと組み合わせて動きを付けることも多い。

          SwiftUIでSkeleton Screenを作る

          SwiftUIのTabViewでUIKitと連携する時の罠

          SwiftUIのTabViewでUIKitと連携する時にハマってしまった部分があったので、その内容と回避策を共有したい。 事象今回はTabViewで既存のUIViewControllerを表示したかったので、UIViewControllerRepresentableに準拠するViewを定義してTabViewで表示した。 なお、わかりやすいようにUIViewController.view.backgroundColorをRGBで設定しており、UIViewControllerW

          SwiftUIのTabViewでUIKitと連携する時の罠

          SwiftUIのTabViewでインタラクティブなタブインジケーターを作る

          今回はこちらの記事で紹介したTabViewでのスワイプページングの改善として、スワイプ操作に追従して上タブのインジケーターがインタラクティブに動くようにしてみた。このようなUIはTwitterやTikTokなどでもよく見かける。 前回の記事では、TabViewと上タブに決めうちでページやタブを並べたが、今回はタブのデータモデルを定義して、データ数に応じてタブ表示が増減できるようにした。 /// タブコンテンツのデータモデルstruct SlideTabContent<Con

          SwiftUIのTabViewでインタラクティブなタブインジケーターを作る

          SwiftUIでNavigationBarをカスタマイズ

          この画像のように、ナビゲーションバーのアイコンにバッジを付与したり、タイトルをカスタムビューにするのはよくある要件だが、今回はSwiftUIでの実装方法を紹介したい。 UIKitの場合まずUIKitでの実装方法について少し触れたいが、アイコンにバッジを付与したい場合は、UIBarButtonItem(customView:)にバッジのカスタムビューを渡して初期化すればよいが、こちらの記事のようにUIBarButtonItemのサブクラスを作るのも良い方法。 また、タイトルの

          SwiftUIでNavigationBarをカスタマイズ