20210113のiOSに関する記事は4件です。

[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"
プロダクトネームとは
  1. Projectナビゲーター (Xcodeの左側)のTargetsセクションからをアプリを選択
  2. Build Settingsタブをクリック
  3. "Product Name"で検索

これで使用できます

    if (@available(iOS 14.0, *)) {
        [WidgetKitHelper reloadAllWidgets];
    }

バックグラウンド時に更新させる場合

- (void)applicationDidEnterBackground:(UIApplication *)application {
    if (@available(iOS 14.0, *)) {
        [WidgetKitHelper reloadAllWidgets];
    }
}

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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のオペレータはジェネリクスを使ったインタフェースを定義することで、メソッドチェ-ンを実現しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】SpriteKit 入門 ①

SpriteKitの使い方を解説します。
まずは画像を表示させてみます。
(環境:Xcode12.1  Swift5.3)

SpriteKitの概要

SpriteKitは2Dのアニメーションやゲームを作成するためのフレームワークです。
RootNodeとなるSceneに各種Nodeを追加していくことで画面上に図形などを表示させることができます。Nodeの種類には次のようなものがあります。また、各NodeにAction(SKAction)を追加することによりアニメーションを追加することができます。

  • SKScene(RootNode)
  • SKSpriteNode(図形の描画)
  • SKLabelNode(テキストの描画)
  • SKEmitterNode(パーティクルの描画)

SpriteKitを用いてアプリを作成する手順はざっくり次の通りです。

  1. SpriteKitSceneファイルを作成※
  2. Sceneに対応するクラスを作成
  3. SceneにNode等を追加していく

※Sceneを作成する方法は、コードで書く方法とSpriteKitSeenファイルを用いる方法があります。後者の方法の場合、Storyboard上でUIパーツを配置するのと同様に画面を作成していくことができます。

画像を表示させる

SpriteKitを使って画像を表示させて見ましょう。

1.プロジェクト作成

プロジェクトを作成します。ここではgameではなくappを選択しています。またInterfaceはStoryboardにしています。
SK1.png

続いてSpriteKitSeenファイルを作成します。
SK2.png

これが作成したSeen(MySeen.sks)になります。
SK3.png

2.Sceneに対応するクラスを作成

MyScene.sksに対応するMySceneクラスをを作成します。ここでは新たにSwiftファイルを追加してクラスを作成しています。作成したクラスはMyScene.sksのカスタムクラスに設定します。
SK4.png

MyScene.swift
import SpriteKit

class MyScene: SKScene {

    override func sceneDidLoad() {
        //sceneが呼ばれたときの処理
    }
}

SK5.png

3.MySceneにSpriteNodeを追加

まず、使用する画像を読み込みます。
SK6.png

次にMyScene.sksファイルに移動へし、ColorSpriteを追加します。
SK7.png

読み込んだTextureを設定します。これでMySceneにSpriteNodeを追加が完了しました。
SK8.png

続いてViewController.swiftファイルへ移動し、以下のコードを書きます。import SpriteKitを忘れないようにしてください。今回は画像にアニメーション等を加えないのでMyScene.swiftファイルの方は特に加筆しなくてOKです。

ViewController.swift
import 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)
            }
        }
    }
}

それでは実行してみましょう。以下のように画像が表示されていれば成功です。

SK9.png

次回は画像をドラッグして動かせるようにしてみようと思います。

参考

この記事は以下の情報を参考にして執筆しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】 SpriteKit 入門 ①

SpriteKitの使い方を解説します。
まずは画像を表示させてみます。
(環境:Xcode12.1  Swift5.3)

SpriteKitの概要

SpriteKitは2Dのアニメーションやゲームを作成するためのフレームワークです。
RootNodeとなるSceneに各種Nodeを追加していくことで画面上に図形などを表示させることができます。Nodeの種類には次のようなものがあります。また、各NodeにAction(SKAction)を追加することによりアニメーションを追加することができます。

  • SKScene(RootNode)
  • SKSpriteNode(図形の描画)
  • SKLabelNode(テキストの描画)
  • SKEmitterNode(パーティクルの描画)

SpriteKitを用いてアプリを作成する手順はざっくり次の通りです。

  1. SpriteKitSceneファイルを作成※
  2. Sceneに対応するクラスを作成
  3. SceneにNode等を追加していく

※Sceneを作成する方法は、コードで書く方法とSpriteKitSeenファイルを用いる方法があります。後者の方法の場合、Storyboard上でUIパーツを配置するのと同様に画面を作成していくことができます。

画像を表示させる

SpriteKitを使って画像を表示させて見ましょう。

1.プロジェクト作成

プロジェクトを作成します。ここではgameではなくappを選択しています。またInterfaceはStoryboardにしています。
SK1.png

続いてSpriteKitSceneファイルを作成します。
SK2.png

これが作成したScene(MyScene.sks)になります。
SK3.png

2.Sceneに対応するクラスを作成

MyScene.sksに対応するMySceneクラスをを作成します。ここでは新たにSwiftファイルを追加してクラスを作成しています。作成したクラスはMyScene.sksのカスタムクラスに設定します。
SK4.png

MyScene.swift
import SpriteKit

class MyScene: SKScene {

    override func sceneDidLoad() {
        //sceneが呼ばれたときの処理
    }
}

SK5.png

3.MySceneにSpriteNodeを追加

まず、使用する画像を読み込みます。
SK6.png

次にMyScene.sksファイルに移動へし、ColorSpriteを追加します。
SK7.png

読み込んだTextureを設定します。これでMySceneにSpriteNodeを追加が完了しました。
SK8.png

続いてViewController.swiftファイルへ移動し、以下のコードを書きます。import SpriteKitを忘れないようにしてください。今回は画像にアニメーション等を加えないのでMyScene.swiftファイルの方は特に加筆しなくてOKです。

ViewController.swift
import 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)
            }
        }
    }
}

それでは実行してみましょう。以下のように画像が表示されていれば成功です。

SK9.png

次回は画像をドラッグして動かせるようにしてみようと思います。

参考

この記事は以下の情報を参考にして執筆しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む