- 投稿日:2021-01-13T10:55:45+09:00
[iOS][Objective-C] Objective-Cアプリ からWidgetを更新する方法
ラッパー(swiftファイル)を用意する
WidgetKitHelper.swift
import WidgetKit @available(iOS 14.0, *) @objcMembers final class WidgetKitHelper: NSObject { class func reloadAllWidgets(){ #if arch(arm64) || arch(i386) || arch(x86_64) WidgetCenter.shared.reloadAllTimelines() #endif } }swiftコードをインポート
#import "プロダクトネーム-Swift.h"プロダクトネームとは
- Projectナビゲーター (Xcodeの左側)のTargetsセクションからをアプリを選択
- Build Settingsタブをクリック
- "Product Name"で検索
これで使用できます
if (@available(iOS 14.0, *)) { [WidgetKitHelper reloadAllWidgets]; }バックグラウンド時に更新させる場合
- (void)applicationDidEnterBackground:(UIApplication *)application { if (@available(iOS 14.0, *)) { [WidgetKitHelper reloadAllWidgets]; } }
- 投稿日:2021-01-13T02:00:04+09:00
RxSwiftのメソッドチェーン
はじめに
初めまして!
タップルでRxSwift武者修行中のせーたろです。RxSwiftを書き始めてから知ったメソッドチェーンの備忘録兼メモです。
メソッドチェーンとは
メソッドを組み合わせた書き方をすることによって、関数型プログラミングの副作用を避ける方法を取り入れたプログラミングをし、より読みやすく宣言的なコードを書いています。
宣言的なコーディングを実現するため、メソッドチェ-ンによる処理の記述が基本であり重要です。map と subscribe による例
// 入力されたInt型の値を2倍する _ = Observable.just(10) .map { $0 * 2 } .subscribe(onNext: { print($0) // => 20 })型が同じ限り一生.mapとかの処理をつなげられるけど、
この場合.subscribeしたら型が変わるのでdisposeBagして終了(多分このつなげて書くやつをつよつよの人は"比較的宣言的な書き方"と言ってるっぽいです)
そして、mapのクロージャの戻り値を Int → Stringにすると
購読できるイベントもInt → Stringになります。
map に使われているクロージャの戻り値によって購読できる型が変わるということですRxSwiftのオペレータはジェネリクスを使ったインタフェースを定義することで、メソッドチェ-ンを実現しています。
- 投稿日:2021-01-13T01:04:47+09:00
【Swift】SpriteKit 入門 ①
SpriteKitの使い方を解説します。
まずは画像を表示させてみます。
(環境:Xcode12.1 Swift5.3)SpriteKitの概要
SpriteKitは2Dのアニメーションやゲームを作成するためのフレームワークです。
RootNodeとなるSceneに各種Nodeを追加していくことで画面上に図形などを表示させることができます。Nodeの種類には次のようなものがあります。また、各NodeにAction(SKAction)を追加することによりアニメーションを追加することができます。
- SKScene(RootNode)
- SKSpriteNode(図形の描画)
- SKLabelNode(テキストの描画)
- SKEmitterNode(パーティクルの描画)
SpriteKitを用いてアプリを作成する手順はざっくり次の通りです。
- SpriteKitSceneファイルを作成※
- Sceneに対応するクラスを作成
- SceneにNode等を追加していく
※Sceneを作成する方法は、コードで書く方法とSpriteKitSeenファイルを用いる方法があります。後者の方法の場合、Storyboard上でUIパーツを配置するのと同様に画面を作成していくことができます。
画像を表示させる
SpriteKitを使って画像を表示させて見ましょう。
1.プロジェクト作成
プロジェクトを作成します。ここではgameではなくappを選択しています。またInterfaceはStoryboardにしています。
2.Sceneに対応するクラスを作成
MyScene.sksに対応するMySceneクラスをを作成します。ここでは新たにSwiftファイルを追加してクラスを作成しています。作成したクラスはMyScene.sksのカスタムクラスに設定します。
MyScene.swiftimport SpriteKit class MyScene: SKScene { override func sceneDidLoad() { //sceneが呼ばれたときの処理 } }3.MySceneにSpriteNodeを追加
次にMyScene.sksファイルに移動へし、ColorSpriteを追加します。
読み込んだTextureを設定します。これでMySceneにSpriteNodeを追加が完了しました。
続いてViewController.swiftファイルへ移動し、以下のコードを書きます。
import SpriteKit
を忘れないようにしてください。今回は画像にアニメーション等を加えないのでMyScene.swiftファイルの方は特に加筆しなくてOKです。ViewController.swiftimport UIKit import SpriteKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //SKViewの作成 if let skView = SKView(frame: self.view.frame) as SKView? { //SKViewにSKSceneを追加 if let scene = MyScene(fileNamed: "MyScene") { //SKSceneのサイズを設定 scene.scaleMode = .aspectFill //SKViewにSKSeenを追加 skView.presentScene(scene) //UIViewにSKViewを追加 self.view.addSubview(skView) } } } }それでは実行してみましょう。以下のように画像が表示されていれば成功です。
次回は画像をドラッグして動かせるようにしてみようと思います。
参考
この記事は以下の情報を参考にして執筆しました。
- 投稿日:2021-01-13T01:04:47+09:00
【Swift】 SpriteKit 入門 ①
SpriteKitの使い方を解説します。
まずは画像を表示させてみます。
(環境:Xcode12.1 Swift5.3)SpriteKitの概要
SpriteKitは2Dのアニメーションやゲームを作成するためのフレームワークです。
RootNodeとなるSceneに各種Nodeを追加していくことで画面上に図形などを表示させることができます。Nodeの種類には次のようなものがあります。また、各NodeにAction(SKAction)を追加することによりアニメーションを追加することができます。
- SKScene(RootNode)
- SKSpriteNode(図形の描画)
- SKLabelNode(テキストの描画)
- SKEmitterNode(パーティクルの描画)
SpriteKitを用いてアプリを作成する手順はざっくり次の通りです。
- SpriteKitSceneファイルを作成※
- Sceneに対応するクラスを作成
- SceneにNode等を追加していく
※Sceneを作成する方法は、コードで書く方法とSpriteKitSeenファイルを用いる方法があります。後者の方法の場合、Storyboard上でUIパーツを配置するのと同様に画面を作成していくことができます。
画像を表示させる
SpriteKitを使って画像を表示させて見ましょう。
1.プロジェクト作成
プロジェクトを作成します。ここではgameではなくappを選択しています。またInterfaceはStoryboardにしています。
これが作成したScene(MyScene.sks)になります。
2.Sceneに対応するクラスを作成
MyScene.sksに対応するMySceneクラスをを作成します。ここでは新たにSwiftファイルを追加してクラスを作成しています。作成したクラスはMyScene.sksのカスタムクラスに設定します。
MyScene.swiftimport SpriteKit class MyScene: SKScene { override func sceneDidLoad() { //sceneが呼ばれたときの処理 } }3.MySceneにSpriteNodeを追加
次にMyScene.sksファイルに移動へし、ColorSpriteを追加します。
読み込んだTextureを設定します。これでMySceneにSpriteNodeを追加が完了しました。
続いてViewController.swiftファイルへ移動し、以下のコードを書きます。
import SpriteKit
を忘れないようにしてください。今回は画像にアニメーション等を加えないのでMyScene.swiftファイルの方は特に加筆しなくてOKです。ViewController.swiftimport UIKit import SpriteKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //SKViewの作成 if let skView = SKView(frame: self.view.frame) as SKView? { //SKViewにSKSceneを追加 if let scene = MyScene(fileNamed: "MyScene") { //SKSceneのサイズを設定 scene.scaleMode = .aspectFill //SKViewにSKSeenを追加 skView.presentScene(scene) //UIViewにSKViewを追加 self.view.addSubview(skView) } } } }それでは実行してみましょう。以下のように画像が表示されていれば成功です。
次回は画像をドラッグして動かせるようにしてみようと思います。
参考
この記事は以下の情報を参考にして執筆しました。