⑪ 拍立得 App「日系Taiwan 動畫風格濾鏡」 if …else 練習
Published in
10 min readJun 12, 2024
「日系台灣風景動畫風格」拍立得 App
捕捉台灣之美,展現日系動畫風格!這款創新的拍立得 App 將帶你踏上一段視覺與情感的旅程,讓你將台灣的絕美風景轉化為唯美的日系動畫風格照片,提供多樣化的拍立得模板、文字功能,讓每張照片都充滿故事性。
功能亮點:
- 日系動畫濾鏡: 內建多款精心設計的日系動畫風格濾鏡,讓你的照片宛如動畫場景般夢幻唯美。
- 多樣化模板: 提供多種拍立得模板,讓你創造出獨一無二的個性化相片。
- 文字紀念功能:可以輸入旅遊心情或個人故事,將文字印製在拍立得照片上,使回憶更加豐富和生動。
基本版
複習上課內容,利用UISegmentControl 調整照片比例大小:
- 圖片:高度原本設定為0
- 依照比例:調整 1:1 ( height = width) 3:4 ( height = width / 3 * 4) 4:5( height = width / 4 * 5)
- 透過if….else 來調整比例 [“1:1”, “3:4”, “4:5”] — 0,1, 2
- 照片調整後比例:Image.frame.size = CGSize(width: width, height: height)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Image: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func Ratio(_ sender: UISegmentedControl) {
let width = 400
var height = 0
if sender.selectedSegmentIndex==0{
height = width
}
if sender.selectedSegmentIndex == 1{
height = width / 3 * 4
}
if sender.selectedSegmentIndex == 2{
height = width / 4 * 5
}
Image.frame.size = CGSize(width: width, height: height)
}
}
進階版
製作出互動性高日式拍立得App
- 利用Canva Ai Painting 繪製多張台灣元素的圖片
- 使用者可以點選喜愛照片,點選比例、輸入文字,即可印出拍立得
UI 設定步驟
ViewController 拉線介紹
IBOutlet
IBAction
成果影片
完整程式碼
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var changePicImage: UIImageView!
//首頁圖片:台北101
@IBOutlet weak var textLabel: UITextField!
// 首頁:輸入框
@IBOutlet weak var SizeLabel: UILabel!
// 調整大小的按鈕
@IBOutlet weak var nextPage: UIView!
// 下一頁的全部View
@IBOutlet weak var nextPicFrame: UIView!
// 拍立得白邊
@IBOutlet weak var nextPicImage: UIImageView!
// 拍立得照片
@IBOutlet weak var nextPageTextLabel: UITextField!
// 拍立得:輸入框
//利用index 方式,取得使用者輸入的順序
var index = Int(0)
let size = ["3:4", "1:1", "4:5"]
override func viewDidLoad() {
super.viewDidLoad()
// 先將拍立得(第二頁)藏起來
nextPage.isHidden = true
}
// 點選圖片前面的按鈕後,自動讓首頁圖片、拍立得圖片均相同
@IBAction func pic2(_ sender: Any) {
changePicImage.image = UIImage(named: "Image2")
nextPicImage.image = UIImage(named: "Image2")
}
@IBAction func pic3(_ sender: Any) {
changePicImage.image = UIImage(named: "Image3")
nextPicImage.image = UIImage(named: "Image3")
}
@IBAction func pic4(_ sender: Any) {
changePicImage.image = UIImage(named: "Image4")
nextPicImage.image = UIImage(named: "Image4")
}
@IBAction func pic5(_ sender: Any) {
changePicImage.image = UIImage(named: "Image5")
nextPicImage.image = UIImage(named: "Image5")
}
@IBAction func pic6(_ sender: Any) {
changePicImage.image = UIImage(named: "Image6")
nextPicImage.image = UIImage(named: "Image6")
}
// 調整大小
@IBAction func sizeChange(_ sender: Any) {
// 利用餘數方式找出index(0,1,2)分別代表:["3:4", "1:1", "4:5"] 圖片比例
index = (1 + index) % 3
SizeLabel.text = size[index]
// 首頁圖片等於拍立得長寬(height and width)、拍立得白邊大於圖片大小、文字高度=圖片高度再往下(最佳比例可彈性設定)
if index == 2 {
changePicImage.frame = CGRect(x: 30, y: 125, width: 330, height: 413)
nextPicFrame.frame = CGRect(x: 20, y: 115, width: 350, height: 500)
nextPicImage.frame = CGRect(x: 10, y: 20, width: 330, height: 413)
nextPageTextLabel.frame = CGRect(x: 15, y: nextPicImage.frame.maxY + 30 , width: 310, height: 30)
} else if index == 1 {
changePicImage.frame = CGRect(x: 30, y: 125, width: 330, height: 330)
nextPicFrame.frame = CGRect(x: 20, y: 115, width: 350, height: 450)
nextPicImage.frame = CGRect(x: 10, y: 20, width: 330, height: 330)
nextPageTextLabel.frame = CGRect(x: 15, y: nextPicImage.frame.maxY + 40, width: 310, height: 30)
} else {
changePicImage.frame = CGRect(x: 30, y: 125, width: 330, height: 440)
nextPicFrame.frame = CGRect(x: 20, y: 115, width: 350, height: 520)
nextPicImage.frame = CGRect(x: 10, y: 20, width: 330, height: 440)
nextPageTextLabel.frame = CGRect(x: 15, y: nextPicImage.frame.maxY + 20, width: 310, height: 30)
}
}
// 第一頁按鈕:出現第二頁,首頁文字=拍立得文字,拍立得往下移動的動畫
@IBAction func next(_ sender: Any) {
nextPageTextLabel.text = textLabel.text
nextPage.isHidden = false
self.nextPicFrame.frame.origin.y = -635
UIView.animate(withDuration: 3){
self.nextPicFrame.frame.origin.y = 115
}
}
// 拍立得打勾按鈕,可進行返回第一頁
@IBAction func back(_ sender: Any) {
nextPage.isHidden = true
}
}