func save(){ let meme = Meme(topText: topTextField.text!, bottomText: bottomTextField.text!, originalImage: imageView.image!, memedImage: memedImage) } func generateMemedImage() -> UIImage { UIGraphicsBeginImageContext(self.view.frame.size) view.drawHierarchy(in: self.view.frame, afterScreenUpdates: true) let memedImage:UIImage = UIGrphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return memedImage }
Month: June 2017
What about the camera?
@IBAction func pickAnImageFromAlbum(_ sender: Any){ let imagePicker = UIImagePickerController() imagePicker.delegate = self present(imagePicker, animated: true, completion: nil) } @IBAction func pickAnImageFromCamera(_ sender: Any){ let imagePicker = UIImagePickerController() imagePicker.delegate = self present(imagePicker, animated: true, completion: nil) } @IBAction func pickAnImageFromAlbum(_ sender: Any){ let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .photoLibrary present(imagePicker, animated: true, completion: nil) } cameraButton.isEnabled = UIImagePickerController.isSourceTypeAvailable(.camera)
let memeTextAttributes:[String:Any] = [ NSStrokeColorAttributeName: NSForegroundColorAttributeName: NSFontAttributeName: UIFont(name: "HelveticaNeue-CondenseBlack", size: 40)!, NSStrokeWidthAttributeName: ]
override func viewWillAppear(_ animated: Bool){ super.viewWillAppear(animated) subscribeTokeyboardNotifications() } override func viewWillDisappear(_ animated: Bool){ super.viewWillDisappear(animated) unsubscribeFromKeyboardNotifications() } func subscribeToKeyboardNotifications(){ NotificationCenter.default.addObserver(self, selector: #selector(keboardWillShow(_:)), name: .UIKey) } func keyboardWillShow(_ notification:Notification){ view.frame.origin.y -= getKeyboardHeight(notification) } func getKeyboardHeight(_ notification:Notification) -> CGFloat{ let userInfo = notification.userInfo let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue return keyboardSize.cgRectValue.height }
Preparing the incoming ViewController
Code: No segue
Code & Segue: Segue is created in Storyboard, action is invoked in code
Seque: No code. set up completely in Storyboard
CurrentVC -> prepareForSeque -> NextVC
override func prepare(for seque: UIStoryboardSegue, sender: Any?) if segue.identifier == "rollDice"{ let controller = segue.destination as! DiceViewController controller.firstValue = randomDiceValue() controller.secondValue = randomDiceValue() }
self.textField1.delegate = emojiDelegate self.textField2.delegate = colorizerDelegate self.textField3.delegate = self
@IBAction func pickAnImage(_ sender: Any){ let imagePicker = UIImagePickerController() imagePicker.delegate = self present(imagePicker, animated: true, completion: nil) }
RollViewController
import UIKit class RollViewController: UIViewController { func randomDiceValue() -> Int { let randomValue = 1 + arc4random() % 6 return Int(randomValue) } @IBAction func rollTheDice(){ var controller:DiceViewController controller = self.storyboard?.instantiateViewControllerWithIdentifier("DiceViewController") as! DiceViewController controller.firstValue = self.randomDiceValue() controller.secondValue = self.randomDiceValue() self.presentViewController(controller, animated: true, completion: nil) } }
Presenting the Dice View
import UIKit class RollViewController: UIViewController { func randomDiceValue() -> Int { let randomValue = 1 + arc4random() % 6 return Int(randomDiceValue) } @IBAction func rollTheDice(){ } }
@IBAction func rollTheDice(){ let controller: DiceViewController controller = storyboard?.instantiateViewController(withIdentifier: "DiceViewController") as! DiceViewController controller.firstValue = randomDiceValue() controller.secondValue = randomDiceValue() present(controller, animated: true, completion: nil) }
Launch Activity View
import UIKit class ViewController: UIViewController { override func viewDidLoad(){ super.viewDidLoad() } @IBAction func experiment(){ let image = UIImage() let controller = UIActivityViewController(activityItems: [image], applicationActivities: nil) self.presentViewController(controller, animated: true, completion:nil) } }
@IBAction func experiment(_ sender: Any){ let nextController = UIImagePickerController() self.present(nextController, animated: true, completion: nil) } @IBAction func experiment(_ sender: Any){ let image = UIImage() let controller = UIActivityViewController(activityItems: [image], self.present(controller, animated: true, completation: nil)) }
import UIKit class DiceViewController: UIViewController { var firstValue: Int? var secondValue: Int? @IBOutlet var firstDie: UIImageView! @IBOutlet var secondDie: UIImageView! override func viewWillAppear(animated: Bool){ if let firstValue = self.firstValue { self.firstDie.image = UIImage(named: "d\(firstValue)") } else { self.firstDie.image = nil; } if let secondValue = self.secondValue { self.secondDie.image = UIImage(named: "d\(secondValue)") } else { self.secondDie.image = nil } self.firstDie.alpha = 0 self.secondDie.alpha = 0 } }
Storyboard
import UIKit class ViewController: UIViewController { var count = 0 var label:UILabel! func incrementCount(){ self.count++ self.label.text = "\(self.count)" } }
import UIKit class ViewController: UIViewController { @IBOutlet weak var colorView: UIView! @IBOutlet weak var redControl: UISwitch! @IBOutlet weak var greenControl: UISwitch! @IBOutlet weak var blueControl: UISwitch! override func viewDidLoad(){ super.viewDidLoad() } @IBAction func changeColorComponent(sender: AnyObject){ let r: CGFloat = self.redControl.on ? 1:0 let g: CGFloat = self.greenControl.on ? 1:0 let b: CGFloat = self.blueControl.on ? 1 : 0 colorView.backgroundColor = UIColor(red: r, green: g, blue: b, alpha:1) } }
@IBAction func experiment(){ let nextController = UIImagePickerController() self.presentViewController(nextController, animated: true, completion:nil) }
Map
1.Outlets and Actions
2.Presenting View Controllers
3.The Delegate Pattern
4.Tables
5.Navigation
6.MemeMe Techniques
Clike counter
ViewController -> UIViewm UILabel, UIButton
import UIKit class ViewController: UIViewController { override func viewDidLoad(){ super.viewDidLoad() var label = UILabel() label.frame = CGRectMake(150, 150, 60, 60) label.text = "0" self.view.addSubview(label) var button = UIButton() button.frame = CGRectMake(150, 250, 60, 60) button.setTitle("click", forState: .Normal) button.setTitleColor(UIColor.blueColor(), forState: .Normal) self.view.addSubview(button) } }
import UIKit class ViewController: UIViewController { var count = 0 var label:UILabel! override func viewDidLoad(){ super.viewDidLoad() var label = UILabel() label.frame = CGRectMake(150, 150, 60, 60) label.text = "0" self.view.addSubview(label) self.label = label var button = UIButton() button.frame = CGRectMake(150, 250, 60, 60) button.setTitle("click", forState: .Normal) button.setTitleColor(UIColor.blueColor(), forState: .Normal) self.view.addSubview(button) button.addTarget(self, action: "incrementCount", forControlEvents: UIControlEvents.TouchUpInside) } func incrementCount(){ self.count++ self.label.text = "\(self.count)" } }
Implementation Steps
Name, Service, Conditions, Event Handler
Name:makeUppercase, Realtime Database, Trigger on specific path, makeUppercase handler
const functions = require('firebase-functions'); exports.emojify = functions.database.ref('/messages/{pushId}/text') .onWrite(event => { if(!event.data.val()|| event.data.previous.val()){ console.log("not a new write event"); return; } console.log("emojifying"); const originalText = event.data.val(); const emojifiedText = emojifyText(originalText); return event.data.ref.set(emojifiedText); }); function emojifyText(text){ var emojifiedText = text; emojifiedText = emojifiedText.replace(/\blob\b/id, ""); emojifiedText = emojifiedText.replace(/\blob\b/id, ""); return emojifiedText; }
FirebaseUI Authentication
Adding Sign In
-Email/Password
-Google
-Facebook
-Twitter
-GitHub
mPhotoPickerButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/jpeg"); intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); startActivityForResult(Intent.createChooser(intent, "Complete action using"), RC_PHOTO_PICKER); } });
service firebase.storage { match /b/friendlychat-12987.appspot.com/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
match /funGifs/cats/{catPics=**}
resource: existing storage data
request: incoming request data
allow read: if request.auth != null && imageId.matches(“.*.gif”)
String name = "Firebase": name = 3; var name = "Firebase"; name = 3; final x = 42; x = 1024; const x = 42; x = 1024 var x = 42; var y = 1024; System.out.println("Message"); Log.d(TAG, "Message"); public int multiply(int a, int b){ return a * b; } String[] list = {"apple", "pear", "orange"}; for (int i = 0; i < list.length; i++){ System.out.println(list[i]) }