[Swift] 드럼 롤 버튼(빙글빙글 회전해 선택하는 버튼)을 UIPickerView로 만드는 ~GAFA의 사이트에 점프 하는 앱을 예로~
16453 단어 iOS앱 개발SwiftUIPickerViewXcode
↑같이 빙글빙글 회전시켜 선택하는 버튼을 만들려고 하면, 일근줄에서는 가지 않았다(라이브러리 같은 것이 없었다) 때문에 만드는 방법을 공유합니다.
완성 이미지(GIF)
GIF를 클릭으로 확대하여 볼 수 있습니다.
운영 환경
Xcode 11.3
iOS 13.3
iPhone 11 Pro Max (시뮬레이터)
코드
이번에는 storyboard를 사용하지 않고 모든 코드로 구현하고 있습니다.
ViewController.swift
// Created by japanesebonobo on 2020/01/10.
// Copyright © 2020 japanesebonobo. All rights reserved.
//
import UIKit
import SafariServices
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
private var myTextField: UITextField!
let pickerView = UIPickerView()
// ドラムロールボタンの選択肢を配列にして格納
let dataSource = ["Google", "Apple", "Facebook", "Amazon"]
override func viewDidLoad() {
super.viewDidLoad()
// UITextFieldの配置するx,yと幅と高さを設定.
let tWidth: CGFloat = 150
let tHeight: CGFloat = 30
let posX: CGFloat = (self.view.bounds.width - tWidth)/2
let posY: CGFloat = (self.view.bounds.height - tHeight)/2
// UITextFieldを作成する.
myTextField = UITextField(frame: CGRect(x: posX, y: posY, width: tWidth, height: tHeight))
// 表示する文字を代入する.
myTextField.text = "START"
myTextField.textAlignment = .center
// Delegateを自身に設定する
myTextField.delegate = self
// 枠を表示する.
myTextField.borderStyle = .bezel
//カーソル(キャレット)を非表示
myTextField.tintColor = UIColor.clear
// myTextFieldをViewに追加する
self.view.addSubview(myTextField)
// pickerViewの配置するx,yと幅と高さを設定.
pickerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height)
// Delegateを自身に設定する
pickerView.delegate = self
// 選択肢を自身に設定する
pickerView.dataSource = self
// pickerViewをViewに追加する
let vi = UIView(frame: pickerView.bounds)
vi.backgroundColor = UIColor.white
vi.addSubview(pickerView)
// UITextField編集時に表示されるキーボードをpickerViewに置き換える
myTextField.inputView = vi
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return dataSource[row]
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataSource.count
}
// 各選択肢が選ばれた時の操作
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch row {
case 0:
// Googleが選ばれたらHPにアクセスする
guard let url = URL(string: "https://www.google.com/?client=safari") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 1:
guard let url = URL(string: "https://www.apple.com/jp/") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 2:
guard let url = URL(string: "https://www.facebook.com") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 3:
guard let url = URL(string: "https://www.amazon.co.jp") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
default:
break
}
}
}
코드 해설
· 드럼 롤 버튼 구현의 포인트는 UITextField를 편집할 때 나오는 키보드를 UIPickerView로 대체하는 것입니다.
· UITextView에서 START 버튼을 만들어 UIPickerView를 만든 후 UITextField.inputView (키보드가 나오는 곳)를 UIPickerView로 바꿉니다.
· GAFA의 각 사이트로 이동할 때 SafariServices를 사용하여 쉽게 구현할 수 있습니다.
잡감
・선택지를 드래그해 놓으면 선택이라고 하는 느낌이 되어 버리고 있다. 선택을 확정하는 버튼이 있으면 편리할지도.
참고
UITextView - iPhone 앱 개발 호랑이 감기
textfield의 파란색 막대를 지우고 싶습니다.
참고로 했습니다. 고마워요.
Reference
이 문제에 관하여([Swift] 드럼 롤 버튼(빙글빙글 회전해 선택하는 버튼)을 UIPickerView로 만드는 ~GAFA의 사이트에 점프 하는 앱을 예로~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/japanesebonobo/items/60239b8e9fdfe4e2be4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Xcode 11.3
iOS 13.3
iPhone 11 Pro Max (시뮬레이터)
코드
이번에는 storyboard를 사용하지 않고 모든 코드로 구현하고 있습니다.
ViewController.swift
// Created by japanesebonobo on 2020/01/10.
// Copyright © 2020 japanesebonobo. All rights reserved.
//
import UIKit
import SafariServices
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
private var myTextField: UITextField!
let pickerView = UIPickerView()
// ドラムロールボタンの選択肢を配列にして格納
let dataSource = ["Google", "Apple", "Facebook", "Amazon"]
override func viewDidLoad() {
super.viewDidLoad()
// UITextFieldの配置するx,yと幅と高さを設定.
let tWidth: CGFloat = 150
let tHeight: CGFloat = 30
let posX: CGFloat = (self.view.bounds.width - tWidth)/2
let posY: CGFloat = (self.view.bounds.height - tHeight)/2
// UITextFieldを作成する.
myTextField = UITextField(frame: CGRect(x: posX, y: posY, width: tWidth, height: tHeight))
// 表示する文字を代入する.
myTextField.text = "START"
myTextField.textAlignment = .center
// Delegateを自身に設定する
myTextField.delegate = self
// 枠を表示する.
myTextField.borderStyle = .bezel
//カーソル(キャレット)を非表示
myTextField.tintColor = UIColor.clear
// myTextFieldをViewに追加する
self.view.addSubview(myTextField)
// pickerViewの配置するx,yと幅と高さを設定.
pickerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height)
// Delegateを自身に設定する
pickerView.delegate = self
// 選択肢を自身に設定する
pickerView.dataSource = self
// pickerViewをViewに追加する
let vi = UIView(frame: pickerView.bounds)
vi.backgroundColor = UIColor.white
vi.addSubview(pickerView)
// UITextField編集時に表示されるキーボードをpickerViewに置き換える
myTextField.inputView = vi
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return dataSource[row]
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataSource.count
}
// 各選択肢が選ばれた時の操作
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch row {
case 0:
// Googleが選ばれたらHPにアクセスする
guard let url = URL(string: "https://www.google.com/?client=safari") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 1:
guard let url = URL(string: "https://www.apple.com/jp/") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 2:
guard let url = URL(string: "https://www.facebook.com") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 3:
guard let url = URL(string: "https://www.amazon.co.jp") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
default:
break
}
}
}
코드 해설
· 드럼 롤 버튼 구현의 포인트는 UITextField를 편집할 때 나오는 키보드를 UIPickerView로 대체하는 것입니다.
· UITextView에서 START 버튼을 만들어 UIPickerView를 만든 후 UITextField.inputView (키보드가 나오는 곳)를 UIPickerView로 바꿉니다.
· GAFA의 각 사이트로 이동할 때 SafariServices를 사용하여 쉽게 구현할 수 있습니다.
잡감
・선택지를 드래그해 놓으면 선택이라고 하는 느낌이 되어 버리고 있다. 선택을 확정하는 버튼이 있으면 편리할지도.
참고
UITextView - iPhone 앱 개발 호랑이 감기
textfield의 파란색 막대를 지우고 싶습니다.
참고로 했습니다. 고마워요.
Reference
이 문제에 관하여([Swift] 드럼 롤 버튼(빙글빙글 회전해 선택하는 버튼)을 UIPickerView로 만드는 ~GAFA의 사이트에 점프 하는 앱을 예로~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/japanesebonobo/items/60239b8e9fdfe4e2be4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// Created by japanesebonobo on 2020/01/10.
// Copyright © 2020 japanesebonobo. All rights reserved.
//
import UIKit
import SafariServices
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
private var myTextField: UITextField!
let pickerView = UIPickerView()
// ドラムロールボタンの選択肢を配列にして格納
let dataSource = ["Google", "Apple", "Facebook", "Amazon"]
override func viewDidLoad() {
super.viewDidLoad()
// UITextFieldの配置するx,yと幅と高さを設定.
let tWidth: CGFloat = 150
let tHeight: CGFloat = 30
let posX: CGFloat = (self.view.bounds.width - tWidth)/2
let posY: CGFloat = (self.view.bounds.height - tHeight)/2
// UITextFieldを作成する.
myTextField = UITextField(frame: CGRect(x: posX, y: posY, width: tWidth, height: tHeight))
// 表示する文字を代入する.
myTextField.text = "START"
myTextField.textAlignment = .center
// Delegateを自身に設定する
myTextField.delegate = self
// 枠を表示する.
myTextField.borderStyle = .bezel
//カーソル(キャレット)を非表示
myTextField.tintColor = UIColor.clear
// myTextFieldをViewに追加する
self.view.addSubview(myTextField)
// pickerViewの配置するx,yと幅と高さを設定.
pickerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height)
// Delegateを自身に設定する
pickerView.delegate = self
// 選択肢を自身に設定する
pickerView.dataSource = self
// pickerViewをViewに追加する
let vi = UIView(frame: pickerView.bounds)
vi.backgroundColor = UIColor.white
vi.addSubview(pickerView)
// UITextField編集時に表示されるキーボードをpickerViewに置き換える
myTextField.inputView = vi
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return dataSource[row]
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataSource.count
}
// 各選択肢が選ばれた時の操作
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch row {
case 0:
// Googleが選ばれたらHPにアクセスする
guard let url = URL(string: "https://www.google.com/?client=safari") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 1:
guard let url = URL(string: "https://www.apple.com/jp/") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 2:
guard let url = URL(string: "https://www.facebook.com") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
case 3:
guard let url = URL(string: "https://www.amazon.co.jp") else { return }
let safariController = SFSafariViewController(url: url)
present(safariController, animated: true, completion: nil)
default:
break
}
}
}
· 드럼 롤 버튼 구현의 포인트는 UITextField를 편집할 때 나오는 키보드를 UIPickerView로 대체하는 것입니다.
· UITextView에서 START 버튼을 만들어 UIPickerView를 만든 후 UITextField.inputView (키보드가 나오는 곳)를 UIPickerView로 바꿉니다.
· GAFA의 각 사이트로 이동할 때 SafariServices를 사용하여 쉽게 구현할 수 있습니다.
잡감
・선택지를 드래그해 놓으면 선택이라고 하는 느낌이 되어 버리고 있다. 선택을 확정하는 버튼이 있으면 편리할지도.
참고
UITextView - iPhone 앱 개발 호랑이 감기
textfield의 파란색 막대를 지우고 싶습니다.
참고로 했습니다. 고마워요.
Reference
이 문제에 관하여([Swift] 드럼 롤 버튼(빙글빙글 회전해 선택하는 버튼)을 UIPickerView로 만드는 ~GAFA의 사이트에 점프 하는 앱을 예로~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/japanesebonobo/items/60239b8e9fdfe4e2be4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
UITextView - iPhone 앱 개발 호랑이 감기
textfield의 파란색 막대를 지우고 싶습니다.
참고로 했습니다. 고마워요.
Reference
이 문제에 관하여([Swift] 드럼 롤 버튼(빙글빙글 회전해 선택하는 버튼)을 UIPickerView로 만드는 ~GAFA의 사이트에 점프 하는 앱을 예로~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/japanesebonobo/items/60239b8e9fdfe4e2be4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)