Skip to content

Instantly share code, notes, and snippets.

import UIKit
import os.log
private let logger = Logger(subsystem: "MyApp", category: "ViewController")
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var task: Task<Void, Error>?
func updateLabelAfterAPICall(initialValue: String) {
task?.cancel() // just in case
task = Task { [weak self] in
try await Task.sleep(nanoseconds: 5_500_000_000)
self?.label.text = "New Value after 5.5 seconds passed"
}
}
@robertmryan
robertmryan / DynamicsDemo.swift
Created April 21, 2022 03:54
Sample UIKit Dynamics w rotated view
class ViewController: UIViewController {
lazy var animator = UIDynamicAnimator(referenceView: view)
override func viewDidLoad() {
super.viewDidLoad()
let animatedView = UIView(frame: CGRect(x: 120, y: 100, width: 50, height: 50))
animatedView.transform = CGAffineTransform(rotationAngle: .pi / 4)
animatedView.backgroundColor = .blue
struct HoundResponse<T: Decodable>: Decodable {
var message: T?
var status: String
}
let url = URL(string: "https://dog.ceo/api/breed/hound/images")!
URLSession.shared.dataTask(with: url) { data, _, error in
guard let data = data, error == nil else {
print(error ?? URLError(.badServerResponse))
return
func fetchBook(id identifier: String) async throws -> GoogleBook {
var components = URLComponents(string: "https://www.googleapis.com/books/v1/volumes")
components?.queryItems = [URLQueryItem(name: "q", value: "{" + identifier + "}")]
guard let url = components?.url else { throw URLError(.badURL) }
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(GoogleBook.self, from: data)
}
let recognizer = SFSpeechRecognizer()
weak var task: SFSpeechRecognitionTask? // note weak reference, as the recognition task keeps strong reference for us while the task is underway
deinit {
task?.cancel() // if still running by the time we deallocate, stop it
}
func startRecognition(of fileURL: URL) {
task?.cancel() // if prior task running, stop it
//
// CGPoint+Centroid.swift
//
// Created by Robert Ryan on 5/19/20.
// Copyright © 2020 Robert Ryan. All rights reserved.
//
// See https://stackoverflow.com/a/61884774/1271826
import Foundation
struct Images {
static func minus(pointSize: CGFloat? = nil) -> UIImage? {
image(named: "minus", pointSize: pointSize)
}
static func trash(pointSize: CGFloat? = nil) -> UIImage? {
image(named: "trash", pointSize: pointSize)
}
private static func image(named name: String, pointSize: CGFloat? = nil) -> UIImage? {
@robertmryan
robertmryan / SnapshotWithMarkerView.swift
Last active July 9, 2021 07:06
MKMapSnapshotter with MKMarkerAnnotationView - https://stackoverflow.com/q/58613580/1271826
func generateMap(with coordinates: [CLLocationCoordinate2D]) {
var annotationViews = [MKMarkerAnnotationView]()
let startCoord = coordinates.first!
let endCoord = coordinates.last!
annotationViews.append(createMapMarkerAnnotation(text: "A", coordinates: startCoord, color: .green))
annotationViews.append(createMapMarkerAnnotation(text: "B", coordinates: endCoord, color: .green))
let snapshotter = MKMapSnapshotter(options: options)
snapshotter.start { snapshot, error in
@robertmryan
robertmryan / PixelProcessing.m
Last active May 24, 2021 08:28
Objective-C rendition of pixel processing found in http://stackoverflow.com/a/31661519/1271826
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"test.png"];
self.imageView.image = [self blackAndWhiteFromImage:image];
}
- (UIImage * _Nullable)makeBlackPixelsRedInImage:(UIImage *)image {
UInt32 black = [self pixelFromRed:0 green:0 blue:0 alpha:255];
UInt32 red = [self pixelFromRed:255 green:0 blue:0 alpha:255];