// // MedalViewController.swift // HDFwear // // Created by yangbin on 2022/3/23. // import UIKit import SnapKit class MedalViewController: UIViewController { @IBOutlet weak var collectionView: UICollectionView! @IBOutlet weak var collectionViewFlowLayout: UICollectionViewFlowLayout! var textArray: [String] = ["步数", "爬高", "热量", "里程", "跑步"] // var medalArray: [[String]] = [["单日1万步", "单日2万步", "单日3万步", "累计5万步", "累计10万步", "累计50万步", "连续7天1万步", "连续21天1万步", "连续100天1万步"], ["胡夫金字塔", "埃菲尔铁塔", "广州塔", "迪拜塔", "富士山", "珠穆朗玛峰"], ["单日200千卡", "单日500千卡", "单日800千卡", "累计1000千卡", "累计5000千卡", "累计10000千卡", "累计2万千卡", "累计5万千卡", "累计10万千卡"], ["环操场20圈", "环操场50圈", "环操场100圈", "北京五环路", "青海湖", "塞浦路斯岛", "台湾岛", "爱尔兰岛", "马达加斯加岛"], ["挑战2千米", "挑战5千米", "挑战10千米", "挑战半马", "挑战全马", "累计10千米", "累计50千米", "累计100千米", "累计500千米", "累计1000千米", "连续7天跑步", "连续21天跑步"]] // var valueDic: [String: String] = ["单日1万步"] var medalArray: [[MedalModel]] = [] var language = AppSettings.shared.language override func viewDidLoad() { super.viewDidLoad() title = LocString("勋章") for text in textArray { if let array = RealmTools.queryObjects(MedalModel.self, filter: "type == %@", [text]) as? [MedalModel] { medalArray.append(array) } } print(medalArray) // let plistPath = Bundle.main.path(forResource: "Medal", ofType: "plist") let shareButton = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 28)) shareButton.setImage(UIImage(named: "share_btn"), for: .normal) shareButton.addTarget(self, action: #selector(share), for: .touchUpInside) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: shareButton) collectionViewFlowLayout.minimumLineSpacing = 1 collectionViewFlowLayout.minimumInteritemSpacing = 10 collectionViewFlowLayout.sectionInset = UIEdgeInsets(top: 2, left: 7, bottom: 5, right: 7) let width = (SCREEN_WIDTH-36)/3.0 collectionViewFlowLayout.itemSize = CGSize(width: width, height: width+30) collectionViewFlowLayout.headerReferenceSize = CGSize(width: SCREEN_WIDTH, height: 30) collectionView.register(UINib.init(nibName: "MedalCell", bundle: .main), forCellWithReuseIdentifier: "MedalCell") collectionView.register(UINib(nibName: "MedalHeaderView", bundle: .main), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "MedalHeaderView") collectionView.showsVerticalScrollIndicator = false // Do any additional setup after loading the view. } @objc func share() { collectionView.scrollToItem(at: IndexPath(row: 0, section: textArray.count-1), at: .bottom, animated: false) if let _ = screenShot() { let shareView = ShareView(self.screenShot()) shareView.show() } } func screenShot() -> UIImage? { UIGraphicsBeginImageContextWithOptions(self.collectionView.contentSize, true, 0.0) //先保存原来frame 和 偏移量 let savedContentOffset = self.collectionView.contentOffset; let savedFrame = self.collectionView.frame; let contentSize = self.collectionView.contentSize; let oldBounds = self.collectionView.layer.bounds; if #available(iOS 13, *) { //iOS 13 系统截屏需要改变tableview 的bounds self.collectionView.layer.bounds = CGRect(x: oldBounds.origin.x, y: oldBounds.origin.y, width: contentSize.width, height: contentSize.height) } //偏移量归零 self.collectionView.contentOffset = CGPoint.zero; //frame变为contentSize self.collectionView.frame = CGRect(x: 0, y: 0, width: self.collectionView.contentSize.width, height: self.collectionView.contentSize.height) //截图 self.collectionView.layer.render(in: UIGraphicsGetCurrentContext()!) if #available(iOS 13,*) { self.collectionView.layer.bounds = oldBounds } let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() //还原frame 和 偏移量 self.collectionView.contentOffset = savedContentOffset self.collectionView.frame = savedFrame return image // } } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ } extension MedalViewController: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { var reusableView: UICollectionReusableView? if kind == UICollectionView.elementKindSectionHeader { let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "MedalHeaderView", for: indexPath) as! MedalHeaderView headerView.titleLabel.text = LocString(textArray[indexPath.section]) reusableView = headerView } return reusableView! } func numberOfSections(in collectionView: UICollectionView) -> Int { return textArray.count } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return medalArray[section].count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MedalCell", for: indexPath) as! MedalCell let medal = medalArray[indexPath.section][indexPath.row] var imageName = medal.title if medal.date == nil { imageName += "灰" } if language != .Chinese { imageName += "英" } cell.imageView.image = UIImage(named: imageName) cell.detailLabel.text = LocString(medal.title) return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { // let cell = collectionView.cellForItem(at: indexPath) as! MedalCell let vc = UIStoryboard.loadViewControllerIdentifier(storyboardName: "Mine", identifier: "MedalDetailVC") as! MedalDetailVC let medal = medalArray[indexPath.section][indexPath.row] vc.medal = medal navigationController?.pushViewController(vc, animated: true) } }