13.1. Integrating Photo Pickers
Updating RegisterView.swift
Let's open App 12
We need to update the Register Screen's view to accommodate the profile photo. Let's open the Register Screen -> RegisterView.swift file. Let's add a couple of UI elements to the view:
labelPhoto
buttonTakePhoto
And then update the constraints to accommodate the new elements on the screen.
//
// RegisterView.swift
// App12
//
// Created by Sakib Miazi on 6/2/23.
//
import UIKit
class RegisterView: UIView {
//codes omitted...
var labelPhoto:UILabel!
var buttonTakePhoto: UIButton!
//codes omitted...
override init(frame: CGRect){
super.init(frame: frame)
self.backgroundColor = .white
//codes omitted...
setuplabelPhoto()
setupbuttonTakePhoto()
//codes omitted...
initConstraints()
}
//codes omitted...
func setuplabelPhoto(){
labelPhoto = UILabel()
labelPhoto.text = "Add Profile Photo"
labelPhoto.font = UIFont.boldSystemFont(ofSize: 14)
labelPhoto.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(labelPhoto)
}
func setupbuttonTakePhoto(){
buttonTakePhoto = UIButton(type: .system)
buttonTakePhoto.setTitle("", for: .normal)
buttonTakePhoto.setImage(UIImage(systemName: "camera.fill")?.withRenderingMode(.alwaysOriginal), for: .normal)
//buttonTakePhoto.setImage(UIImage(systemName: "camera.fill")?.withRenderingMode(.alwaysOriginal), for: .normal)
buttonTakePhoto.contentHorizontalAlignment = .fill
buttonTakePhoto.contentVerticalAlignment = .fill
buttonTakePhoto.imageView?.contentMode = .scaleAspectFit
buttonTakePhoto.showsMenuAsPrimaryAction = true
buttonTakePhoto.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(buttonTakePhoto)
}
//codes omitted...
func initConstraints(){
NSLayoutConstraint.activate([
textFieldName.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 32),
textFieldName.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
textFieldName.widthAnchor.constraint(equalTo: self.safeAreaLayoutGuide.widthAnchor, multiplier: 0.9),
textFieldEmail.topAnchor.constraint(equalTo: textFieldName.bottomAnchor, constant: 16),
textFieldEmail.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
textFieldEmail.widthAnchor.constraint(equalTo: self.safeAreaLayoutGuide.widthAnchor, multiplier: 0.9),
textFieldPassword.topAnchor.constraint(equalTo: textFieldEmail.bottomAnchor, constant: 16),
textFieldPassword.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
textFieldPassword.widthAnchor.constraint(equalTo: self.safeAreaLayoutGuide.widthAnchor, multiplier: 0.9),
buttonTakePhoto.topAnchor.constraint(equalTo: textFieldPassword.bottomAnchor, constant: 16),
buttonTakePhoto.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
//MARK: setting buttonTakePhoto's height and width..
buttonTakePhoto.widthAnchor.constraint(equalToConstant: 100),
buttonTakePhoto.heightAnchor.constraint(equalToConstant: 100),
labelPhoto.topAnchor.constraint(equalTo: buttonTakePhoto.bottomAnchor),
labelPhoto.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor),
buttonRegister.topAnchor.constraint(equalTo: labelPhoto.bottomAnchor, constant: 32),
buttonRegister.centerXAnchor.constraint(equalTo: self.safeAreaLayoutGuide.centerXAnchor)
])
}
//codes omitted...
}
Patching RegisterViewController to Pick Photo
Now we update the RegisterViewController.swift:
In the above code:
We import PhotosUI library to implement photo pickers.
We declare a UIImage variable
pickedImageon line 16 to keep the picked photo.We set up the menu items for two options: Camera and Gallery (line 22 and lines 26 through 38).
Then as we did in https://github.com/sakibnm/iOS/blob/main/6.-uimenu-picking-images-from-gallery-and-camera-and-uiimageview, we define
pickUsingCamera()andpickPhotoFromGallery()methods.
We still need to adopt the protocols related to PHPickerView, and UIImagePicker. We will separate the adoption of protocols from RegisterViewController.swift file.
PhotoManager.swift
Let's create a new file PhotoManager.swift in Register Screen group and put the following code in it:
In the above code, we save the selected image in pickedImage variable (on lines 31 and 51).
Now that the Photo Pickers are integrated let's run the app. We should see the following:

Note: we are making 'pick a profile photo' for the new user optional. So, a user can be created without even picking a photo.
Last updated
Was this helpful?