APNsとは

What is APNs?
Apple Push Notification Service (APNs) is the core of remote notification functionality. It is a robust, secure, and very efficient service for application developers to deliver information to iOS(and indirectly watchOS), tvOS, and macOS devices.
なるほど。

The four main methods used on the app’s introductory screen

Splash
It is a technique called splash that is adopted by most applications. This screen appears when you tap the app icon from home, and it is used to earn data loading time or to make the app known to the user as a brand.

However, since it is only for the purpose of earning time and recognizing the brand, it is not compatible with tool-based apps. The user who uses the tool wants to “use it quickly and repeatedly”.

Walk through
A technique called walk-through is a method that allows the user to gradually understand the features and usage of the app using slides instead of letting the app touch the app immediately after launching the app. Often see people who call it “Tutorial”, but the official name for this is Walkthrough.

Coach mark
Overlays and pop-ups appear on the normal screen of the app. Use arrows to explain the function of each button and what its contents mean. If the UI becomes complicated and it is determined that “a user who has just installed the app will be confused if you look at this screen”, you should adop it.

Empty state
It may be an unfamiliar word, but the point is “the guy who displays when the content is empty”. The purpose of this screen is “convey information that there is no content now” and “convey action to be performed next”.
It may be more user-friendly to have an empty state for apps that do not display content if you do not follow someone, or for apps such as Notepad that create content yourself.

Assets.xcassetsに画像を置く

グー、チョキ、パーの画像を置いていきます。

これをどうやって、controller.swfitで呼び出すんだ?
let image = UIImage(named: “Image2”)でコンパイルしてみる。

override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "Image2")
        imageView.image = image
        imageView.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView)
        // Do any additional setup after loading the view, typically from a nib.
    }

あれ、UIImage(named: “ファイル名”)でいけますね。
すると、/app/hoge.jpg と /app/Aseets.xcassets/hoge 共にUIImage(named: “hoge”)で読み込める、ということですな。 詳細はわかりませんが、コンパイルする際に、同階層として扱っているんでしょう。

では、ボタンを押したら、グーチョキパーがランダムで表示されるよう作っていきたいと思います。

Assets.xcassetsでAppIconを設定する

Asset Catalog ファイル(.xcassets):
画像を一元管理出来るようになり、画像ファイルの追加・削除・修正を行ってもプロジェクトファイル(.pbxproj)は変更されない

早速置いてみましょう。

Assets.xcassetsを押下すると、以下のような画面になります。

AppIconがデフォルトで入っています。AppIconをクリックすると

retina ディスプレイ対応を2x, 3xで表しています。
2xは、2倍ですね。

以下の画像をおきます。

あら、should be 80 x 80pix と言われました。

とりあえず、エミュレーターをbuildして見ます。
なに、なんか知らんがエラーになった。

やっぱり120px x 120でないとダメみたい。
本当なら、psdで編集したいが、横着してtoolでresizeします。

エラーが消えたのでコンパイルします。
bui1ld succeeded!
いいね、これ好きです。

うお、warningが出まくってる

きた! icon変わりました。niceです。

imageView.contentModeでエラーになった時

まず画像を用意する
チョキは適当な画像が見当たらなかった為、ピースサイン

続いてStory boardにUIImageViewを配置する
control でviweController.swiftに繋げて、UIImage(named: “janken_goo”)と書く
let image = UIImage(named: “janken_goo”)
imageView.image = image

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "janken_goo")
        imageView.image = image
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

UIImageViewの画像サイズのままになっている。。
48x48pixなんだけどな。
それと、今日、本屋で立ち読みした本には、画像はAssets.xcassestsに置くと書いてあったが。。swift書くまえにいきなりつまづいた。

imageView.contentMode で画像の縦横サイズを指定出来るらしい。

override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "janken_goo")
        imageView.image = image
        imageView.contentMode = UIViewContentMode.Center
        self.view.addSubview(imageView)
        // Do any additional setup after loading the view, typically from a nib.
    }

UIViewContentMode.Centerでerror, build出来ない。
なに???

いろいろなサイトを横断して、appleのdeveloper siteのuiviewcontentmodeを見てみる
https://developer.apple.com/documentation/uikit/uiviewcontentmode

case center
The option to center the content in the view’s bounds, keeping the proportions the same.

なに? centerは小文字?
imageView.contentMode = UIViewContentMode.centerで再度build

override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "janken_goo")
        imageView.image = image
        imageView.contentMode = UIViewContentMode.center
        self.view.addSubview(imageView)
        // Do any additional setup after loading the view, typically from a nib.
    }

おおおお、ファイヤー
iOS開発で初めてちょっと仕事した!

ios 新しいclass file

file -> new -> file -> cocoa file

新しく作ったcocoa classをview controllerと紐づける

ふむふむ

prepare func

class ViewController: UIViewController {

    @IBOutlet weak var nameText: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    ovrride func prepare(for seque: UIStoryboardSeque, sender: Any?)
    {
        let resultVC = seque.destination as! ResultViewController
        resultVC.myName = self.nameText.text!
    }


}