UITabBarItem
и UITabBarController
. Переопределеют нужные св-ва и методы. В первую очередь переопределить св-во selectedItems
на свой подкласс и методы выбора по нажатию, добавив в них layer
анимацию. path
залив его цветом .clear
. Путь - круг и идущая от него линия. Причём, если элемент самый крайний, то линия ток слева или справа, для остальных она в обе стороны. Останется добавить лишь strokeEndAnimation
, которая будет заливать цветом этот путь идя от начало пути в конец. Об этом хорошо написано тут: https://www.calayer.com/core-animation/2017/12/25/...СollectionViewCell
это View
, а TableViewController
это ViewController
, как бы совсем разные вещи. Имейте чёткое представление об этом. Правильный вопрос: Могу ли я в СollectionViewCell
добавить TableView
или вообще говоря любой View
? (Вы это спрашивали?)tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // или что своё
где UITableViewAutomaticDimension, the table view is told to use the Auto Layout constraints and the contents of its cells to determine each cell’s height.
import AVFoundation
+ класс AVAudioPlayer
UITextField
. Для этих целей существует UITextFieldDelegate
. Или, если ты не знаешь что это такое, то просто посмотри внимательно, там есть такие события как Editing Changed/Did Begin/Did End(в том же списке, где ты и выбрал valueChanged). guard let email = json["email"].string else
, но если бы ты внимательно смотрел на свой JSON, то увидел бы: for (index,subJson) in json {
print(subJson["email"].string)
}
func tableView(UITableView, cellForRowAt: IndexPath)
просто возвращаем инстансы статических ячеек для последних трех позиций и инстансы динамической для остальных.UIView.layer.shadowPath
.import UIKit
@IBDesignable
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.layer.shadowColor = UIColor.purple.cgColor
textField.layer.cornerRadius = 8
textField.layer.masksToBounds = false
textField.layer.shadowOffset = CGSize.zero
textField.layer.shadowRadius = 3.0
textField.layer.shadowOpacity = 0.7
let path = UIBezierPath()
path.move(to: CGPoint(x: 0.0, y: 0.0))
path.addLine(to: CGPoint(x: textField.bounds.size.width/2, y: textField.bounds.size.height/2))
path.addLine(to: CGPoint(x: textField.bounds.maxX, y: 0.0))
path.addLine(to: CGPoint(x: textField.bounds.maxX, y: textField.bounds.maxY))
path.addLine(to: CGPoint(x: 0.0, y: textField.bounds.maxY))
path.close()
textField.layer.shadowPath = path.cgPath
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}