So, I have written a program
that is a map app which allows user to see there location
when they open the app and when they double tap it allows them to drop a pin
the bottom view which is hidden shows up and i want to show images in that view since i made the hight of the view really small i cant use storyboard to add components in it and i added a activity indicator
with code but for some reason the activity indicator is not showing up on the screen
even when the hight of the hidden view changes and it comes up. this is the code
import UIKit
import MapKit
import CoreLocation
class MapVC: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var pullUpViewHighConstraint: NSLayoutConstraint!
@IBOutlet weak var pullUpView: UIView!
@IBOutlet weak var mapView: MKMapView!
var locationManager = CLLocationManager()
var authStatus = CLLocationManager.authorizationStatus()
let regiounRadius: Double = 1000
var spinner: UIActivityIndicatorView?
var progrssLabel: UILabel?
var screen = UIScreen.main.bounds
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.mapView.showsUserLocation = true
configureLocationServices()
addDoubleTap()
}
func addDoubleTap() {
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(droupPin(sender:)))
doubleTap.numberOfTapsRequired = 2
doubleTap.delegate = self
mapView.addGestureRecognizer(doubleTap)
}
func addSwipe() {
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(animateViewDown))
swipe.direction = .down
pullUpView.addGestureRecognizer(swipe)
}
func animateViewUp() {
pullUpViewHighConstraint.constant = 300
UIView.animate(withDuration: 0.4) {
self.view.layoutIfNeeded()
}
}
@objc func animateViewDown() {
pullUpViewHighConstraint.constant = 0
UIView.animate(withDuration: 0.4) {
self.view.layoutIfNeeded()
}
}
func addSpinner() {
spinner = UIActivityIndicatorView()
spinner?.center = CGPoint(x: screen.width / 2 - (spinner?.frame.width)! / 2, y: 150)
spinner?.activityIndicatorViewStyle = .whiteLarge
spinner?.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
spinner?.stopAnimating()
pullUpView.addSubview(spinner!)
}
@IBAction func centerMapBtnPressed(_ sender: Any) {
if authStatus == .authorizedAlways || authStatus == .authorizedWhenInUse{
centerMapOnUserLocation()
// removePin()
}else {return}
}
}
extension MapVC: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
let pinAnnotation = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "droppablePin")
pinAnnotation.pinTintColor = #colorLiteral(red: 0.9771530032, green: 0.7062081099, blue: 0.1748393774, alpha: 1)
pinAnnotation.animatesDrop = true
return pinAnnotation
}
func centerMapOnUserLocation() {
guard let coordinets = locationManager.location?.coordinate else { return }
let coordinateRegion = MKCoordinateRegionMakeWithDistance(coordinets, regiounRadius*2.0, regiounRadius*2.0)
mapView.setRegion(coordinateRegion, animated: true)
}
@objc func droupPin(sender: UITapGestureRecognizer) {
removePin()
animateViewUp()
addSwipe()
addSpinner()
let touchPoint = sender.location(in: mapView)
let touchCoordinate = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let annotation = DroppablePin(coordinatee: touchCoordinate, identifierr: "droppablePin")
mapView.addAnnotation(annotation)
let coordinateRegion = MKCoordinateRegionMakeWithDistance(touchCoordinate, regiounRadius*2.0, regiounRadius*2.0)
mapView.setRegion(coordinateRegion, animated: true)
}
func removePin() {
for annotation in mapView.annotations {
mapView.removeAnnotation(annotation)
}
}
}
extension MapVC: CLLocationManagerDelegate {
func configureLocationServices() {
if authStatus == .notDetermined {
locationManager.requestAlwaysAuthorization()
}
else {
return
}
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
centerMapOnUserLocation()
}
}