Giter Site home page Giter Site logo

draggableimageform's Introduction

DraggableImageForm

[ING]画像ファイルをドラッグ&ドロップを利用したフォームなどのサンプル(iOS Sample Study: Swift)

表示画像のタップ時やUICollectionViewの選択時等の「処理のトリガーとなる部分でGestureRecognizerを活用」や「一覧表示→詳細遷移のタイミングでのカスタムトランジション」を織り交ぜて、入力画面や表示タイミングのポイントになる部分のUIに一工夫を加えてみた形にしてみました。

また、レシピを選んで選択状態にする部分に関しては、UILongTapGestureRecognizerをUICollectionViewに付与をした上で、UILongTapGestureRecognizer発動時に実行されるメソッド内でドラッグ&ドロップで対象のレシピサムネイル画像をヒットエリアに持って行き選択をするような動きをする実装をしています。

実装機能一覧

本サンプル内で実装している機能の一覧は下記になります。

  • 現在月の表示を元に祝祭日と曜日付きの日付のボタン表示機能
  • UILongTapGestureRecognizerを使用したUICollectionViewCell内の画像をドラッグ&ドロップで動かしてヒットエリア判定を利用した選択処理機能
  • SwiftyJSON & Alamofireを利用したAPI通信機能(楽天レシピカテゴリ別ランキングAPI使用)
  • APIから取得した画像表示時キャッシュ機能
  • Realmを使用した選択したレシピデータのアーカイブ保存機能
  • カスタムトランジションを利用したレシピ画像の拡大・縮小を伴う画面遷移機能
  • ContainerViewを重ねてスライド式メニューを表示する機能

本サンプルの画面キャプチャ

画面キャプチャその1

今回のサンプルの画面一覧その1

画面キャプチャその2

今回のサンプルの画面一覧その2

画面キャプチャその3

今回のサンプルの画面一覧その3

レシピを選択する画面での主な機能について

1. MakeRecipeController.swiftでの各ボタンの役割

ボタンの役割

2. レシピ表示のUICollectionViewのセルを長押しした場合の動き

選択時及び画像ドラッグ中の表示

3. 任意のレシピを選択した場合の表示

レシピが選択状態になった際の表示

レシピ選択画面におけるUIの操作概要

  1. UIScrollViewに配置したボタンから対象の日付を日にちのボタンをタップして選択する
  2. 「Add」ボタンを押すとUICollectionViewにAPIから取得したデータ4件が表示されます。また続けてタップボタンを押すとさらに別カテゴリのデータが4件表示されます(重複もありえる)
  3. UICollectionViewの任意のセルを長押しすると選択した画像が指で動かせるようになるので、ヒットエリア(実体はUIButton)までドラッグして指を離すとそのレシピが選択状態になり、ヒットエリア以外で指を離すと選択状態にならずに画像表示が元に戻る
  4. 日にちとレシピデータが選択されている状態でヒットエリアを押下すると、ポップアップが表示されレシピのアーカイブデータ登録フォームが表示される
  5. 選択したデータを全て解除及びレシピ画像を一旦クリアする場合には「Reset」ボタンを押下すると選択データと表示レシピデータを削除する

レシピ選択画面の他の部分における機能に関する設計図

本サンプルでの実装機能の中でポイントとなる部分の設計概要に関しては下記の図解を参考にしていただければ幸いです。

1. Storyboard概略図

Storyboard概略図

2. 楽天レシピカテゴリ別ランキングAPIからのデータ取得処理に関する概要

楽天レシピカテゴリ別ランキングAPIからのデータ取得処理に関する概要

3. Realmのカラム定義に関する概要

Realmのカラム定義に関する概要

4. レシピ一覧画面から詳細画面へ遷移する際のカスタムトランジションに関する概要

レシピ一覧画面から詳細画面へ遷移する際のカスタムトランジションに関する概要

5. ContainerViewの重なりとプロトコルを活用したメニュー開閉処理に関する概要

ContainerViewの重なりとプロトコルを活用したメニュー開閉処理に関する概要

使用ライブラリ

UIまわりの実装と直接関係のない部分に関しては、下記のライブラリを使用しました。

参考記事

下記の記事及びサンプルを参考にしてSwift3.0.2で書き直し及びアレンジを加えて本サンプルを作成しました。この場をお借り致しましてお礼申し上げます。ありがとうございました。

このサンプル全体の詳細解説とポイントをまとめたものは下記に掲載しております。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.