• Swift & Web Api Asp.Net (C#)?

    YeahGarage
    @YeahGarage Автор вопроса
    DevMan, Понял. Тогда занимаюсь. Благодарю
  • Swift & Web Api Asp.Net (C#)?

    YeahGarage
    @YeahGarage Автор вопроса
    eRKa, Теперь понятнее. У меня был вопрос принятие с моей стороны в приложении объемный файлов, я забыл про вариант с base64. Теперь понятнее решение. Благодарю за время
  • Swift & Web Api Asp.Net (C#)?

    YeahGarage
    @YeahGarage Автор вопроса
    Приветствую. Я смотрел и написал пару вариантов. Но у меня приложение должно принимать фото и видео, которые весят от 1-10 мб. И я думал может кто то сталкивался с какими то библиотеками или хорошими решениями. А может и того что проще. В любом случае благодарю за ответ
  • Как правильно реализовать градиент в tableview cell?

    YeahGarage
    @YeahGarage Автор вопроса
    doublench21, все уже сделал спасибо за то что направили, последний вопрос. Просто скажите в какой сторону копать.

    - В таблице две коллекции, у каждой фото есть кнопка скачать, как правильно реализовать, что бы при нажатии на кнопку скачать, пользователь же не будет ждать пока загрузится файл, он начнет скролить таблицу дальше. Как правильно реализовать загрузку в таком случае, ведь он может нажать и 20 файлов сказать. Тут просто скажите направление и я разберусь
    - И также под вопрос, когда идет скачивание файла, выполняется работа прелоадера, но при скролинге товаров, прелоадер появлятся у всех товаров. Тоже в какую сторону бежать или как лучше такое реализовать в правильном направлении?
  • Как правильно реализовать градиент в tableview cell?

    YeahGarage
    @YeahGarage Автор вопроса
    doublench21, Могли бы ответить как будет время?
  • Как правильно реализовать градиент в tableview cell?

    YeahGarage
    @YeahGarage Автор вопроса
    Прощу прощения за долгий ответ

    1. Очень благодарен за столь детальный ответ, этого не услышишь в сфит уроках Акулова))) теперь все стало на свои места, есть вопросы, они будут дальше по тексту

    2. Лучше уточню, полученые data я убрал асинхронность, а вот как правильно поступить с обновление ui в main потоке - DispatchQueue.main.async? Также убрать?
    2.1 Я закомментил потоки и также main поток, но теперь первая ячейка дублирует контент второй. Понимаю что сейчас реализация правильная, но странно почему так происходит конечно после того как убрал потоки. Буду разбираться

    3. Как раз занимался этим и сморел на git проекты с наиболее удачными примерами в данной реализации

    4. Сделал,
    За это особое спасибо - ShouldRasterize в true, Это свойство CALayer которое определяет, должен ли слой быть растрирован. Когда это свойство имеет значение true, то слой рисуется один раз. Всякий раз при его анимировании, он не будет перерисовываться и растровая информация будет удаляться. Данному свойству должно быть присвоено значение true, если у вас есть представление, которое не нужно часто перерисовывать. Обратите внимание, что при установке shouldRasterize, отображение слоя на устройствах Retina может измениться. Это происходит потому, что слои имеют так называемый масштаб растрирования, при помощи которого происходит растрирование слоя. Чтобы не допустить это, установите rasterizationScale на UIScreen.mainScreen().scale, так чтобы слой растрировался в таком же масштабе, что и отображается экран.
    ***Мало ли может кому будет полезно сразу прочесть тут

    5. Еще раз спасибо Вам за Ваше время и силы что отвечаете почти всем. Как будет время буду рад последним ответам от Вас
  • Как правильно реализовать градиент в tableview cell?

    YeahGarage
    @YeahGarage Автор вопроса
    Руслан привет
    С Днем Рождения, здоровья и всех благ тебе

    1. Нет, я для этого начал писать приложения, но в большинстве онлайн уроков все основано на выводе лейбла и не более.

    2. Да я начал и работаю над материалом, опять таки материал не затрагивает примеры как вести себя с таблицами. А поскольку я не закрепил основной материал то в таблицы ещё не полез

    3. На примере работы с потоками
    - я создал поток в котором получаю данные из массива urls
    - в основном потоке я обновляю ui
    - я понимаю что реализация не вернаяя, поэтому и задал вопрос, каюсь но учусь
  • Как реализовать Выбор ячейки в UICollectionView didSelectItemAt?

    YeahGarage
    @YeahGarage Автор вопроса
    Сергей Дунаев, очень круто. Все работает. Очень Вам благодарен. Возьму курс и разберусь. Вы очень помогли!!!!!!!!
  • Как реализовать Выбор ячейки в UICollectionView didSelectItemAt?

    YeahGarage
    @YeahGarage Автор вопроса
    в дочернем классе, который отвечает за секцию с видео, не работает метод didselect если к cell.addsubview добавлено view плеера, если вью плеера убрать, то didselect работает

    class VideoCollectionViewCell: UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, AVPlayerViewControllerDelegate {
    
        
        let videCellId = "CellId"
        var player = AVPlayer()
        let indexPath = IndexPath(item: 0, section: 0)
        
        
        var stories: [String]? {
            didSet {
                collectionView.reloadData()
            }
        }
        
        
        let collectionView: UICollectionView = {
            let layout = UICollectionViewFlowLayout()
            layout.minimumLineSpacing = 30
            layout.scrollDirection = .horizontal
            let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
            cv.backgroundColor = UIColor.clear
            return cv
        }()
        
        
        override init(frame: CGRect) {
            super.init(frame: frame)
            setup()
        }
        
        
        func setup() {
            //backgroundColor = .cyan
            addSubview(collectionView)
            collectionView.translatesAutoresizingMaskIntoConstraints = false
            collectionView.topAnchor.constraint(equalTo: self.topAnchor, constant: 15).isActive = true
            collectionView.bottomAnchor.constraint(equalTo:  self.bottomAnchor, constant: 15).isActive = true
            collectionView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 5).isActive = true
            collectionView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 5).isActive = true
            collectionView.delegate = self
            collectionView.dataSource = self
            collectionView.allowsSelection = true
            collectionView.register(InsideVideoCell.self, forCellWithReuseIdentifier: videCellId)
        }
        
        
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return stories?.count ?? 5
        }
        
        
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: videCellId, for: indexPath) as! InsideVideoCell
            
            if let storiesArray = stories?[indexPath.item] {
                let url = URL(string: storiesArray)
                let playerItem = AVPlayerItem(url: url!)
                self.player = AVPlayer(playerItem: playerItem)
                player.actionAtItemEnd = .none
                let videoPlayerLayer = AVPlayerLayer(player: self.player)
                videoPlayerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
                videoPlayerLayer.frame = cell.bounds
                cell.videoPlayerController.player = self.player
                cell.videoPlayerController.view.frame = videoPlayerLayer.frame
                cell.videoPlayerController.view.clipsToBounds = true
                cell.videoPlayerController.view.layer.cornerRadius = 15
                cell.contentView.isUserInteractionEnabled = true
                cell.videoPlayerController.view.isUserInteractionEnabled = true
                cell.addSubview(cell.videoPlayerController.view)
            }
            return cell
        }
        
        
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            print("Выбрана ячейка: (\(indexPath.section), \(indexPath.item))")
        }
        
        
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            return CGSize(width: frame.width - 174, height: frame.height - 18)
        }
      
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("Error VideoCell")
        }
        
        
    
        private class InsideVideoCell: UICollectionViewCell, AVPlayerViewControllerDelegate {
            
            public var videoPlayerController = AVPlayerViewController()
    
            func addControls() {
                videoPlayerController.showsPlaybackControls = false
            }
            
            override init(frame: CGRect) {
                super.init(frame: frame)
                setup()
                addControls()
            }
    
            func setup() {
                videoPlayerController.delegate = self
            }
    
            required init?(coder aDecoder: NSCoder) {
                fatalError("Error ImagesCell")
            }
        }
    }
  • Как реализовать Выбор ячейки в UICollectionView didSelectItemAt?

    YeahGarage
    @YeahGarage Автор вопроса
    Шикарно. Благодарю Вас. Курс обязательно куплю и пройду
    Последний вопрос

    - В чем может быть проблема, если в секции где imageView все отлично работает

    - В секции где к cell cell.addSubview(videoPlayerController.view) не работает. Если убрать suview c видео то все работает.

    - В коде вроде все отмечено для корректной работы
    cell.contentView.isUserInteractionEnabled = true
                cell.videoPlayerController.view.isUserInteractionEnabled = true
  • Как реализовать Выбор ячейки в UICollectionView didSelectItemAt?

    YeahGarage
    @YeahGarage Автор вопроса
    doublench21, Я пробывал это делать в дочерних. Сейчас еще раз повторно попробывал но не срабатывает

    К родительском классе ячейку у меня
    tap.delegate = self
    tap.cancelsTouchesInView = false
    tap.isEnabled = true


    К ячейке добавил
    cell.addGestureRecognizer(tap)

    В методе didSelectItemAt
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: .bottom)
            self.collectionView(self.collectionView, didSelectItemAt: IndexPath(item: 0, section: 0))
    }


    Все методы в дочерних классах срабатывают
    CollectionView willDisplay VideoCell
    CollectionView didEndDisplaying VideoCell
    Prepare For Reuse

    Что я мог упустить?
  • Как переключать VC по нажатию. на ячейку tableView?

    YeahGarage
    @YeahGarage
    doublench21, Что в таком случае порекомендуете учить из данного направления?
    QoS,
    Synchronisation & Mutex,
    NSRecursiveLock & Mutex Recursive lock,
    NSCondition, NSLocking, pthread_cond_t,
    GCD, Concurrent queues, Serial queues, sync-async,
    Operation & OperationQueue & OperationBlock
  • Как переключать VC по нажатию. на ячейку tableView?

    YeahGarage
    @YeahGarage
    Я не разбирал и не учил еще DispatchQueue.main, я начал с Thread & Pthread. В любом случае с Вами согласен и буду все учить
  • Как переключать VC по нажатию. на ячейку tableView?

    YeahGarage
    @YeahGarage
    doublench21, Т.е. потоки использовать только до перехода в новый вью?
  • Как переключать VC по нажатию. на ячейку tableView?

    YeahGarage
    @YeahGarage
    Можно без DispatchQueue, смотря какие задачи у Вас идут сейчас в основном потоке