Архив

Архив раздела ‘Other’
27 марта 2024 Нет комментариев
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate{
    var webView: WKWebView!
    lazy var progressbar: UIProgressView = UIProgressView();
    deinit {
        self.webView.removeObserver(self, forKeyPath: "estimatedProgress")
        self.webView.scrollView.removeObserver(self, forKeyPath: "contentOffset")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        let webConfiguration = WKWebViewConfiguration();
        webConfiguration.dataDetectorTypes = [.all]
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.translatesAutoresizingMaskIntoConstraints = false
        self.webView.navigationDelegate = self
        view.addSubview(webView)
        self.webView.frame = self.view.frame
        self.webView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
            webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
            webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor)
        ])
        self.webView.addSubview(self.progressbar)
        self.setProgressBarPosition()
        webView.scrollView.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
        self.progressbar.progress = 0.1
        self.progressbar.trackTintColor = .white
        self.progressbar.progressTintColor = UIColor(red:244/255.0, green: 66/255.0, blue: 8/255.0, alpha: 1)
        webView.addObserver(self, forKeyPath: "estimatedProgress",options: .new, context: nil)
        let myURL = URL(string:"https://ya.ru")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(reloadWebView(_:)), for: .valueChanged)
        webView.scrollView.addSubview(refreshControl)
        if #available(iOS 11.0, *){
            webView.scrollView.contentInsetAdjustmentBehavior = .never;
        }
        webView.navigationDelegate = self
        webView.allowsBackForwardNavigationGestures = true
    }
    func setProgressBarPosition(){
        self.progressbar.translatesAutoresizingMaskIntoConstraints = false
        self.webView.removeConstraints(self.webView.constraints)
        self.webView.addConstraints([
            self.progressbar.topAnchor.constraint(equalTo: self.webView.topAnchor, constant: self.webView.scrollView.contentOffset.y * -1),
            self.progressbar.leadingAnchor.constraint(equalTo: self.webView.leadingAnchor),
            self.progressbar.trailingAnchor.constraint(equalTo: self.webView.trailingAnchor)
        ])
    }
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        switch keyPath{
        case "estimatedProgress":
            if self.webView.estimatedProgress >= 1.0 {
                UIView.animate(withDuration: 0.3, animations: {() in
                    self.progressbar.alpha = 0.0
                }, completion: { finished in
                    self.progressbar.setProgress(0.0, animated: false)
                })
            } else{
                self.progressbar.isHidden = false
                self.progressbar.alpha = 1.0
                progressbar.setProgress(Float(self.webView.estimatedProgress), animated: true)
            }
        case "contentOffset":
            self.setProgressBarPosition()
        default:
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
        }
    }
    @objc func reloadWebView(_ sender: UIRefreshControl){
        webView.reload()
        sender.endRefreshing()
    }
    func share(message: String, link: String){
        if let link = NSURL(string: link){
            let objectsToShare = [message, link] as [Any]
            let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
            self.present(activityVC, animated: true, completion: nil)
        }
    }
}
extension ViewController: WKNavigationDelegate{
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void){
        guard
            let url = navigationAction.request.url else{
            decisionHandler(.cancel)
            return
        }
        let string = url.absoluteString
        if(string.contains("mailto:")){
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            decisionHandler(.cancel)
            return
        }
        if(string.contains("tel:")){
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            decisionHandler(.cancel)
            return
        }
        if(string.contains("?share")){
            let urlArr = string.components(separatedBy: "?")
            let link = urlArr[0]
            share(message: "", link: link)
            decisionHandler(.cancel)
            return
        }
        decisionHandler(.allow)
    }
}

https://josh.blog/2020/02/swiftui-webview-with-a-progress-bar

Categories: Other Tags:
13 октября 2023 Нет комментариев

Регулярное выражение для поиска и замены, заменить на «пусто».

((?<=<p)|(?<=<span)|(?<=<div)|(?<=<ul)|(?<=<ol)|(?<=<li)|(?<=<h1)|(?<=<h2)|(?<=<h3)|(?<=<h4)|(?<=<h5)|(?<=<h6)|(?<=<table)|(?<=<tr)|(?<=<th)|(?<=<td))[^>]*(?=>)
Categories: Other Tags:
8 апреля 2021 Нет комментариев

Аналогом в Firebird для MySQL запроса

SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC LIMIT 10

будет:

SELECT FIRST 10 SKIP 0 PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC

или:

SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC ROWS 10
SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC ROWS 1 TO 10
Categories: Other Tags:

Задача: посчитать количество точек внутри и по периметру прямоугольника.
Точки расставлены на расстоянии 3 метра друг от друга, т.е. ширина и длина кратны 3.

Внешние = ((ширина+длина)*2)/3
Всего = ((ширина/3)+1)*((длина/3)+1)
Внутренние = всего - внешние
Categories: Other Tags:
4 апреля 2013 Нет комментариев

Понадобилось импортировать список контактов из резервной копии iphone (сам iphone в нерабочем состоянии), в мобильный на android.

Что нужно сделать…

1. Экспортировать контакты из резервной копии в формат vcard (*.vcf)
Для этого используем ПО: iphone-backup-browser

Страница проекта: http://code.google.com/p/iphone-backup-browser/
Зеркало у себя: iphone-backup-browser.zip
Выбираем последний backup и «save contacts as vcard».

2. Полученным файл записываем на карту памяти телефона для импорта.

3. Импортируем список контактов..

Categories: Mac, Other Tags:
28 февраля 2012 Нет комментариев

1. Скачиваем последнюю версию прошивки ftp://ftp.acer-euro.com/netbook/aspire_one_110/bios
2. Форматируем флешку в FAT.
3. Копируем содержимое папки в архиве на флешку.
4. Переименовываем *.fd файл в ZG5IA32.FD
5. С подключенной флешкой нажимаем Fn + ESC, и не отпуская Power
6. Когда индикатор Power замигает, жмем Power еще раз. Должно начаться чтение с флешки. Power мигать перестанет.
7. Просто ждем, около минуты. Когда прошивка закончится, включится дисплей и попросит удалить все сменные носители.
http://monitor.espec.ws/section34/topic116941.html

Categories: Other Tags:
27 ноября 2011 Нет комментариев

Оформление для Sony Ericsson W200i. ПО: http://www.lasyk.net/mTC/

Скачать

Categories: Other Tags: