02 장
1. UIImageView
를 이용한 간단한 애니메이션
// ViewController.swift
// Animations
import UIKit
class ViewController: UIViewController {
var counter = 1
@IBOutlet var alienImage: UIImageView!
@IBAction func updateImage(sender: AnyObject) {
if counter == 5 {
counter = 1
} else {
counter = counter + 1
}
alienImage.image = UIImage(named: "frame\(counter).png")
}
}
2. Timer 클래스를
이용한 간단한 애니메이션
// Swift 4.0
// ViewController.swift
// Animations with Timer
import UIKit
class ViewController: UIViewController {
var counter = 1
var isAnimating = false
// Timer 객체 생성
var myTimer = Timer()
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var imageCounter: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
imageCounter.text = String(counter)
}
@IBAction func play(_ sender: Any) {
if isAnimating == false {
// Timer 실행
myTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(doAnimation), userInfo: nil, repeats: true)
isAnimating = true
} else {
myTimer.invalidate()
isAnimating = false
}
}
// Timer에 의해 동적으로 호출되는 함수
@objc func doAnimation() {
if counter == 5 {
counter = 1
} else {
counter = counter + 1
}
myImageView.image = UIImage(named: "frame\(counter).png")
imageCounter.text = String(counter)
}
}
// override func viewDidLayoutSubviews() {
//
// alienImage.frame = CGRectMake(100, 20, 0, 0)
// }
//
// override func viewDidAppear(animated: Bool) {
//
// UIView.animateWithDuration(1, animations: { () -> Void in
// self.alienImage.frame = CGRectMake(100, 20, 100, 200)
// })
// }
//}
알고리즘 과제 참고 1)
// ViewController.swift
// Created by 남소연 on 2016. 3. 30..
import UIKit
class ViewController: UIViewController {
var counter = 0
var timer = NSTimer()
var isAnimating = false
var logoImage = ["frame1.png","frame2.png","frame3.png","frame4.png","frame5.png"]
@IBOutlet var rbtn2: UIButton!
@IBOutlet var lbtn2: UIButton!
@IBAction func lbtn(sender: AnyObject) {
counter--
if(counter == 0){
lbtn2.hidden = true
}
alienImage.image = UIImage(named:logoImage[counter])
print(counter)
rbtn2.hidden = false
}
@IBAction func rbtn(sender: AnyObject) {
counter++
if(counter == logoImage.count-1){
rbtn2.hidden = true
}
alienImage.image = UIImage(named:logoImage[counter])
print(counter)
lbtn2.hidden = false
}
@IBOutlet var alienImage: UIImageView!
@IBAction func updateImage(sender: AnyObject) {
if isAnimating == true{
timer.invalidate()
isAnimating = false
}else{
timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("doAnimation"), userInfo: nil, repeats: true)
isAnimating = true
}
print(counter)
}
override func viewDidLoad() {
super.viewDidLoad()
alienImage.image = UIImage(named:logoImage[counter])
lbtn2.hidden = true
// timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("doAnimation"), userInfo: nil, repeats: false)
//
// //Do any additional setup after loading the view, typically from a nib.
}
func doAnimation(){
if counter == 5{
counter = 1
}else{
counter++
}
alienImage.image = UIImage(named:logoImage[counter-1])
}
}
알고리즘 과제 참고 2)
// ViewController.swift
// ImageView Slider
// Created by 김종현 on 2016. 3. 19..
import UIKit
class ViewController: UIViewController {
var myImage = ["01.png", "02.png", "03.png", "04.png", "05.png"]
var count = 1 // 첫번째 이미지
@IBOutlet var myImageView: UIImageView!
@IBOutlet var fwdButton: UIButton!
@IBOutlet var backButton: UIButton!
@IBAction func fwdButtonPressed(sender: AnyObject) {
if count < myImage.count {
count++
myImageView.image = UIImage(named: "0\(count).png" )
print("fwd count = \(count)")
if count == myImage.count {
fwdButton.hidden = true
}
backButton.hidden = false
}
}
@IBAction func backButtonPressed(sender: AnyObject) {
if count <= myImage.count {
count--
myImageView.image = UIImage(named: "0\(count).png" )
print("back count = \(count)")
if count == 1 {
backButton.hidden = true
}
fwdButton.hidden = false
}
}
override func viewDidLoad() {
super.viewDidLoad()
myImageView.image = UIImage(named: "01.png")
myImageView.contentMode = UIViewContentMode.ScaleToFill
//myImageView.contentMode = UIViewContentMode.ScaleAspectFill
let backImage = UIImage(named: "backBtn.png")
backButton.setImage(backImage, forState: .Normal)
let fowardImage = UIImage(named: "forwardBtn.png")
fwdButton.setImage(fowardImage, forState: .Normal)
// 실행 초기에는 backButton을 hidden(첫번째 이미지 이므로)
backButton.hidden = true
}
}
알고리즘 과제 참고 3)
// ViewController.swift
// SlideShow
// Created by 허민욱 on 2016. 3. 30..
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var backwardButton: UIButton!
@IBOutlet weak var forwardButton: UIButton!
var count = 1
var myImage = ["1.jpg", "2.jpg", "3.jpg,", "4.jpg", "5.jpg"]
var timer = NSTimer() // instance 생성
var isPlaying = false
@IBAction func fButtonPressed(sender: AnyObject) {
if(count < myImage.count) {
count++
myImageView.image = UIImage(named: "\(count).jpg")
backwardButton.hidden = false
if(count == myImage.count) {
forwardButton.hidden = true
}
}
}
@IBAction func bButtonPressed(sender: AnyObject) {
if(count > 1) {
count--
myImageView.image = UIImage(named: "\(count).jpg")
forwardButton.hidden = false
if(count == 1) {
backwardButton.hidden = true
}
}
}
@IBAction func autoButtonPressed(sender: AnyObject) {
if isPlaying == true {
timer.invalidate()
isPlaying = false
}
else {
timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self,
selector: "doPlaying", userInfo: nil, repeats: true)
isPlaying = true
}
}
func doPlaying() {
if count == myImage.count {
count = 1
} else {
count++
}
myImageView.image = UIImage(named: "\(count).jpg")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
backwardButton.hidden = true
}
}
[실습 Image Viewer]
// 02 천태훈
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var leftbtn: UIButton!
@IBOutlet weak var rightbtn: UIButton!
@IBOutlet weak var Image: UIImageView!
@IBOutlet weak var mylbl: UILabel!
var count = 0
var imgList = ["01.png","02.png","03.png","04.png","05.png","06.png"]
@IBAction func left(_ sender: UIButton) {
if count <= imgList.count {
if count > 0 {
count = count - 1
}
Image.image = UIImage(named: imgList[count])
mylbl.text = "\(count+1)"
}
}
@IBAction func right(_ sender: UIButton) {
if count < imgList.count-1{
count = count + 1
Image.image = UIImage(named: imgList[count])
mylbl.text = "\(count+1)"
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
Image.image = UIImage(named: imgList[count])
mylbl.text = "Start"
}
}
// 02 김민규
// (1) 이미지 순회
// (2) 이미지 좌우반
import UIKit
class ViewController: UIViewController {
let name = ["01.png","02.png","03.png","04.png","05.png","06.png"]
var num = 0;
@IBOutlet weak var img: UIImageView!
@IBOutlet weak var lbl: UILabel!
@IBAction func btnl(_ sender: UIButton) {
//이미지 좌우 반복
// num = num+1
// if (num > name.count - 1 ) { //배열이 마지막을 못 넘아가게 체크
// num = 5
// } else {
// lbl.text = String(num+1)
// img.image = UIImage(named: name[num])
// }
//이미지 순회
num = num+1
if (num > name.count - 1 ) {
num = 0
img.image = UIImage(named: name[num])
lbl.text = String(num+1)
} else {
lbl.text = String(num+1)
img.image = UIImage(named: name[num])
}
}
@IBAction func btnr(_ sender: UIButton) {
//좌우 반복
// num = num-1
// if num < 0 {
// num = 0
// } else {
// lbl.text = String(num+1)
// img.image = UIImage(named: name[num])
// }
//순회 반복
num = num-1
if num < 0 {
num = 5
img.image = UIImage(named: name[num])
lbl.text = String(num+1)
} else {
lbl.text = String(num+1)
img.image = UIImage(named: name[num])
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
img.image = UIImage(named: name[num])
lbl.text = String(num+1)
}
}
[코딩 문제 07] UIImageView
를 이용한 슬라이드 쇼 앱 제작
- 코딩 조건 1) image를 5개를 배열에 넣고, 디바이스가 landscape 형식으로 보여 지게 하라.
- 코딩 조건 2) Forward/Backwrad 버튼을 한번 터치할때 마다 이미지가 한장씩 순방향/역방향으로 각각 이동하며, 마지막 이미지와 첫번째 이미지를 만나면 circular 방식(1->2->3->4->5->4->3->2->1)으로 보여진다.
- 코딩 조건 3) 이미지의 첫번째와 마지막에서 더이상의 이미지를 보여줄 수 없을때는 각각 Forward/ Backward 버튼은 각각 hidden 된다.
1) 첫번째 이미지
2) 두번째 이미지
3) 세번째 이미지
[코딩 문제 08] [코딩 문제 07]을 NSTimer
를 이용하여 슬라리드 쇼가 될 수 있도록 Play/Stop 버튼(AutoSlider)을 추가하시오.
[코딩 문제 09] [코딩 문제 08]을 AutoLayou을 적용하여 아이폰 4-inch", 4.7-inch, 5.5-inch가 모두 정상적을 보여질 수 있도록 하시오.
3. UIDaterPicker
// Simple DataPicker
// XCode 10.1
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var outLabel: UILabel!
@IBOutlet weak var myDatePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// UI의 지역화(locatization)
let locale = Locale(identifier: "ko_KO")
myDatePicker.locale = locale
// DatePicker 모드 설정
myDatePicker.datePickerMode = UIDatePicker.Mode.date
// label 값 초기 설정
let date = Date()
let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd HH:mm EEE a"
let formattedDate = format.string(from: date)
//print(formattedDate)
outLabel.text = formattedDate
}
@IBAction func changeDatePicker(_ sender: Any) {
let selectedData = myDatePicker.date
print(selectedData)
// Date 형을 문자형으로 변환
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
outLabel.text = formatter.string(from: selectedData)
}
}
DateFormatter 참고 : https://dev17.tistory.com/13
// S https://dev17.tistory.com/13imple PickerView
// XCode 10.1
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var myColor = ["red", "green", "blue"]
@IBOutlet weak var outLabel: UILabel!
@IBOutlet weak var myPickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
// Deleagte 객체 연결
myPickerView.delegate = self
myPickerView.dataSource = self
// 실행 초기 Label 문자를 "red"로 변경
outLabel.text = myColor[0]
}
// UIPickerViewDataSource 메소드 호출
public func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return myColor.count
}
// UIPickerViewDelegate 메소드 호출
public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return myColor[row]
}
public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
outLabel.text = myColor[row]
}
}
4. UIPickerView, UIPickerViewDelegate, UIPickerViewDelegate
[코딩 문제 10] UIPickerView를 이용한 온도 변환
func fahrenheitToCelsius(fahrenheitValue : Double) -> Double {
var result : Double
result = (((fahrenheitValue - 32) * 5) / 9)
return result
}