Computer >> कंप्यूटर >  >> स्मार्टफोन्स >> iPhone

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

इस पोस्ट में हम प्रोग्राम के रूप में स्विफ्ट में Spotify होम स्क्रीन लेआउट को फिर से बनाने की कोशिश करेंगे। प्रोग्रामेटिक रूप से क्यों? मुझे लगता है कि यह जानना हमेशा अच्छा होता है कि चीजों को अलग-अलग तरीकों से कैसे बनाया जाता है, और मुझे प्रोग्राम को प्रोग्रामेटिक रूप से करने के लिए कोड लिखना पसंद है। यदि आप टीम के साथ काम कर रहे हैं या संस्करण नियंत्रण का उपयोग कर रहे हैं तो ये कौशल विशेष रूप से सहायक होते हैं।

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

यह Spotify के मोबाइल ऐप की वास्तविक होम स्क्रीन है। तो इस प्रकार के लेआउट को प्राप्त करने के लिए, हम UICollectionView . का उपयोग करेंगे , और हम TabBarController . का उपयोग कर सकते हैं साथ ही टैब नेविगेटर बनाने के लिए।

मूल आवश्यकता :पहले सुनिश्चित करें कि आपके पास Xcode +10 स्थापित है और +4 तेज़ है।

आइए Xcode का उपयोग करके एक नया Xcode प्रोजेक्ट बनाकर शुरू करें:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

और सबसे पहले हमें ViewController.swift . में करना होगा सुपरक्लास को UICollectionViewController . में बदल रहा है UIViewController . के बजाय क्योंकि हमारी क्लास collectionView . पर आधारित होगी ।

//
//  ViewController.swift
//  spotifyAutoLayout
//
//  Created by admin on 10/31/19.
//  Copyright © 2019 Said Hayani. All rights reserved.
//

import UIKit

class ViewController: UICollectionViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        collectionView.backgroundColor = .purple
        // Do any additional setup after loading the view.
    }


}

यदि आप ऐप चलाने का प्रयास करते हैं तो बिल्ड विफल हो जाएगा। हमें AppDelegate.swift . में कुछ कोड जोड़ने की जरूरत है didFinishLaunchingWithOptions . के अंदर फ़ाइल करें कोड के इस भाग को return . से पहले कार्य करें कथन:

  let layout = UICollectionViewFlowLayout()
        window = UIWindow()
        window?.rootViewController = ViewController(collectionViewLayout: layout)

और कोड इस तरह दिखना चाहिए:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        let layout = UICollectionViewFlowLayout()
        window = UIWindow()
        window?.rootViewController = ViewController(collectionViewLayout: layout)
        return true
    }

अब आपको ऐप चलाने और backgroundColor . देखने में सक्षम होना चाहिए purple . में बदला गया :

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

अगला कदम लेआउट को वितरित करना और अनुभागों के बीच समान रूप से स्थान को विभाजित करना है।

आइए हमारे CollectionView . के तरीकों को परिभाषित करें ।

कदम:

  • अद्वितीय पहचानकर्ता के साथ पुन:प्रयोज्य सेल पंजीकृत करें
  • अनुभाग में मदों की संख्या निर्धारित करें
  • पंजीकृत सेल का उपयोग करें

कुछ CollectionView . का उपयोग करने के लिए वे तरीके जिन्हें हमें हमेशा UICollectionViewDelegateFlowLayout . के अनुरूप बनाने की आवश्यकता होती है एक सुपरक्लास के रूप में और विधियों का स्वत:पूर्ण प्राप्त करने के लिए। तो चलिए CollectionViewCell का पंजीकरण शुरू करते हैं।

अंदर View.DidLoad() हम collectionView.register() . कहते हैं पुन:प्रयोज्य सेल को पंजीकृत करने की विधि:

  collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)

फिर हम collectionView . के अंदर मौजूद सेल की संख्या को परिभाषित करते हैं numberOfItemsInSection . का उपयोग करके . अभी के लिए हमें इसे केवल 5 आइटम बनाने की आवश्यकता है:

 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

अगला चरण cellForItemAt . का उपयोग करके पुन:प्रयोज्य सेल को परिभाषित करना है जो UICollectionViewCell return लौटाना चाहिए और उनके पास cellId . नामक एक अद्वितीय आईडी है . कोड इस तरह दिखता है:

 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = .red
        return cell
    }

पूरा कोड इस तरह दिखना चाहिए:

import UIKit

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
    let cellId : String = "cellId"

    override func viewDidLoad() {
        super.viewDidLoad()
        collectionView.backgroundColor = .purple
        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)

    }


    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = .red
        return cell
    }

}

आपको स्क्रीन पर लाल पृष्ठभूमि वाले 5 आइटम देखने में सक्षम होना चाहिए:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

सेल में एक कस्टम चौड़ाई और ऊंचाई जोड़ें

अब हमें कोशिकाओं को सही क्रम में रखना है और उन्हें एक width देना है और height . प्रत्येक सेल width लेगी स्क्रीन के रूप में width

हम भाग्यशाली हैं कि हमारे पास sizeForItemAt है विधि ताकि हम कोशिकाओं को एक कस्टम width . दे सकें और height . यह एक ऐसा तरीका है जिसे CGSize . लौटाना चाहिए टाइप करें:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width = view.frame.width
        let height = CGFloat(200)
        
        return CGSize(width: width, height: height)
    }

इसलिए हमने Cell . बनाया width लें view.frame.width . का उपयोग करके स्क्रीन का और एक कस्टम height के साथ एक CGFloat है टाइप करें।

अब आप अपने सिम्युलेटर में परिणाम नीचे देख सकते हैं:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

अब तक सब कुछ अच्छा लग रहा है। इस बार एक कस्टम सेल बनाते हैं जिसे पुन:प्रयोज्य किया जा सकता है। CustomCell . नाम की एक नई स्विफ्ट फ़ाइल बनाएं :

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

CustomCell.swift नीचे इस तरह दिखना चाहिए:


import UIKit

class CustomCell: UICollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

अब अगली चीज़ जो हमें करनी है वह है पुन:प्रयोज्य सेल का समर्थन करने के लिए दो विधियों को संशोधित करना, collectionView.register और cellForItemAt . आइए पहले रजिस्टर विधि को संशोधित करें। UICollectionViewCell.self बदलें CustomCell के साथ :

 collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)

आगे हमें cellForItemAt cast डालना होगा CustomCell . के अनुरूप होना नीचे की तरह:

  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! CustomCell

यदि आप ऐप चलाते हैं तो शायद आपको कोई बदलाव नज़र नहीं आएगा, इसलिए CustomCell को एक बैकग्राउंड कलर दें backgroundColor = .yellow . लाइन को हटाना न भूलें cell.backgroundColor = .red में cellForItemAt . आपको पृष्ठभूमि का रंग बदलकर पीला देखना चाहिए?

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

अब CutomCell . में थोड़ा नमक डालने का समय आ गया है :डी

यदि आप Spotify होम स्क्रीन को देखते हैं, तो प्रत्येक अनुभाग जो एक CustomCell है हमारे उदाहरण में एक अनुभाग शीर्षक, उप-कोशिकाएँ हैं, और यह क्षैतिज है:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

एक ​​अनुभाग शीर्षक जोड़ें

आइए सेल में एक शीर्षक लेबल जोड़ें। titleLabel बनाएं CutomCell . के अंदर तत्व कक्षा:

let titleLabel: UILabel = {
        let lb  = UILabel()
        lb.text = "Section Title"
        lb.font = UIFont.boldSystemFont(ofSize: 14)
        lb.font = UIFont.boldSystemFont(ofSize: 14)
        
        return lb
    }()

फिर तत्व को init() . के अंदर के दृश्य में जोड़ें ब्लॉक करें:

addSubview(titleLabel)

यदि आप ऐप चलाते हैं तो आपको कोई बदलाव नहीं दिखाई देगा, और ऐसा इसलिए है क्योंकि हमने अभी तक तत्व के लिए कोई बाधा नहीं डाली है। तो चलिए कुछ बाधाएँ जोड़ते हैं - यह गुण जोड़ें lb.translatesAutoresizingMaskIntoConstraints = false करने के लिए titleLabel तत्व के लिए बाधाओं को लागू करने में सक्षम होने के लिए:

हमारे द्वारा titleLabel add जोड़ने के बाद देखने के लिए, हम बाधाओं को परिभाषित करते हैं:

 addSubview(titleLabel)
titleLabel.topAnchor.constraint(equalTo: topAnchor, constant: 8).isActive = truetitleLabel.leftAnchor.constraint(equalTo: leftAnchor,constant: 8 ).isActive = true

हमेशा .isActive = true जोड़ना सुनिश्चित करें संपत्ति - इसके बिना बाधा काम नहीं करेगी!

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

इससे पहले कि हम अगले भाग पर जाएँ, आइए पहले स्क्रीन की पृष्ठभूमि का रंग बदलकर काला करें और सेल के लिए पीला रंग भी हटा दें:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

अब बड़ा हिस्सा आता है:प्रत्येक कोशिका में उप-कोशिकाएँ डालना। इसे प्राप्त करने के लिए हम एक CollectionView जोड़ने जा रहे हैं अंदर CustomCell

एक CollectionView जोड़ने के लिए अंदर UICollectionViewCell हमें गुण जोड़ने की जरूरत है UICollectionViewDelegate , UICollectionViewDelegateFlowLayout , और UICollectionViewDataSource सुपरक्लास के रूप में CustomCell

आइए बनाते हैं collectionView किसी भी साधारण दृश्य के रूप में तत्व:


    let collectionView : UICollectionView = {
        // init the layout
        let layout = UICollectionViewFlowLayout()
        // set the direction to be horizontal
        layout.scrollDirection = .horizontal
        
        // the instance of collectionView
        
        let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
       
        // Activate constaints
      
        cv.translatesAutoresizingMaskIntoConstraints = false
        
        return cv
        
    }()
संदर्भ:https://stackoverflow.com/questions/44614743/add-uicollectionview-in-uicollectionviewcell

ध्यान दें कि हम layout . जोड़ते हैं करने के लिए collectionView प्रारंभकर्ता में परत के रूप में जैसा कि हमने पहली बार viewController.swift . के साथ किया था . यहां हम FlowLayout . की दिशा भी निर्दिष्ट करते हैं होने के लिए .horizontal

आइए जोड़ें collectionView सबव्यू के रूप में देखने के लिए तत्व।

हम एक ऐसा फंक्शन बनाने जा रहे हैं जो हमारे लिए कोड को थोड़ा साफ करने के लिए ऐसा करेगा।

    fileprivate  func setupSubCells(){
        // add collectionView to the view
        addSubview(collectionView)
 
        collectionView.dataSource = self
        collectionView.delegate = self
        // setup constrainst
        // make it fit all the space of the CustomCell
        collectionView.topAnchor.constraint(equalTo: titleLabel.bottomAnchor).isActive = true
        collectionView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
        collectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
        collectionView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
    }

प्रतिनिधि को self . पर सेट करना सुनिश्चित करें collectionView . के लिए और डेटा स्रोत भी:

collectionView.dataSource = self

collectionView.delegate = self

फिर फ़ंक्शन को init . के भीतर कॉल करें ब्लॉक करें।

यदि आप ऐप बनाने का प्रयास कर रहे हैं तो Xcode कुछ त्रुटियां प्रदर्शित करेगा क्योंकि हम UICollectionViewDelegate के अनुरूप नहीं हैं और UICollectionViewDelegateFlowLayout प्रोटोकॉल इसे ठीक करने के लिए हमें सबसे पहले उप सेल को पुन:प्रयोज्य सेल के रूप में पंजीकृत करना होगा।

कक्षा के शीर्ष पर एक चर बनाएँ और इसे cellId . का नाम दें इसलिए हम इसका उपयोग तब कर सकते हैं जब हमें सेल पहचानकर्ता की आवश्यकता हो:

let cellId : String = "subCellID"

collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)

अब हम त्रुटियों को दूर करने के लिए दो और तरीके खो रहे हैं:numberOfItemsInSection जो अनुभाग में कक्षों की संख्या को परिभाषित करते हैं और cellForItemAt जो पुन:प्रयोज्य सेल को परिभाषित करता है। collectionView . के लिए ये तरीके जरूरी हैं ठीक से काम करने के लिए:

 // number of cells
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
       return  4
    }
    
    // reusable Cell
     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
         cell.backgroundColor = .yellow
        
        return cell
    }

परिणाम इस तरह दिखना चाहिए:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

जैसा कि आप देख सकते हैं, collectionView पृष्ठभूमि के रूप में बैंगनी रंग में हैं और उप-कोशिकाएं पीले रंग की हैं।

इस लेख को समाप्त करने से पहले हम जो आखिरी काम कर सकते हैं, वह है subCells अनुभाग की ऊंचाई और चौड़ाई के रूप में है। फिर से हम sizeForItemAt . का उपयोग कर रहे हैं height को परिभाषित करने के लिए और width सेल का।

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        let width = frame.height
        let height = frame.height
        
        return CGSize(width: width, height: height)
        
    }

और यहाँ हम हैं ?:

AutoLayout के साथ iOS के लिए प्रोग्रामेटिक रूप से Spotify क्लोन कैसे बनाएं?

अच्छा! मैं इस बिंदु पर रुकने वाला हूं इसलिए यह पोस्ट बहुत लंबी नहीं है। मैं एक दूसरा भाग बनाऊंगा जहां हम कुछ नकली तस्वीरें जोड़ने जा रहे हैं और इसे कुछ डेटा से भर देंगे।

पूर्ण स्रोत कोड? यहाँ

कृपया कृपया यदि आपके पास कोई अतिरिक्त, प्रश्न या सुधार हैं, तो इसे नीचे टिप्पणी में पोस्ट करें? या मुझे ट्विटर पर मारो।

सदस्य बनें इस ट्यूटोरियल का दूसरा भाग प्रकाशित होने पर अधिसूचित होने के लिए मेरी ईमेल सूची में


  1. iOS के लिए किंडल के साथ किताबें कैसे खरीदें और डाउनलोड करें

    पढ़ना सबसे अच्छी आदतों में से एक है जो न केवल आपको समय के साथ रखता है बल्कि आपके संपूर्ण व्यक्तित्व को बेहतर बनाने में मदद करने के लिए भी सिद्ध होता है। यह न केवल तनाव के स्तर को कम करने में मदद करता है बल्कि मनुष्य में महत्वपूर्ण सोच विकसित करता है। अब जब समय आधुनिक हो गया है, तो पढ़ने के प्लेटफॉर्

  1. iOS 13 के साथ माउस को अपने iPhone से कैसे कनेक्ट करें

    आपको यह जानकर प्रसन्नता होगी कि नवीनतम iOS संस्करण अपडेट, यानी iOS 13 और iPadOS के साथ, अब आप अपने ब्लूटूथ माउस को अपने iPhone और iPad से कनेक्ट कर सकते हैं। अब आप माउस को अपने iPhone से कनेक्ट करने के लिए एक्सेसिबिलिटी फीचर का उपयोग कर सकते हैं। इस पोस्ट में, हम चर्चा करते हैं कि माउस को iPhone से

  1. iOS 16 वाले iPhone पर बैटरी प्रतिशत कैसे दिखाएं

    पांच साल पहले, Apple ने iPhone X लॉन्च किया था। इसकी स्क्रीन के शीर्ष पर कभी-विवादास्पद पायदान के साथ काफी कट्टरपंथी डिजाइन था। यह कैसा दिखता था इसके अलावा, इसने स्टेटस बार में आइकन और जानकारी के लिए उपलब्ध स्थान की मात्रा को बहुत कम कर दिया। और हताहतों में से एक यह था कि Apple ने बैटरी प्रतिशत प्र