ios - আপনি কীভাবে পটভূমির চিত্রের স্কেলটি দ্রুতগতিতে স্ক্রিন আকারে তৈরি করবেন?



swift xcode (6)

কেবলমাত্র আপনার ইউআইআইএমভিউ ভিউ অবস্থানিকেন্দ্রিক এবং সমস্ত প্রান্তগুলি প্রান্তে ছড়িয়ে দিয়ে যুক্ত করুন। এটিকে সেখানে রেখে দিন এবং নীচের দিকে প্রদর্শিত নীচে ডান নীচে কোণায় ক্লিক করুন এবং এখন এগিয়ে যান এবং শীর্ষ, নীচে, বাম এবং ডান প্রান্তগুলিতে 4 টি বাধা যুক্ত করুন।

এখন কেবল আপনার চিত্রের ভিউটি নির্বাচন করুন এবং আইবি পরিদর্শক ব্যবহার করে আপনি কীভাবে আপনার চিত্রটি পছন্দ করবেন তা নির্বাচন করুন: নীচের হিসাবে আপনি দেখতে পারবেন এমনভাবে পূরণ করুন বা ফিট করুন:

https://ffff65535.com

আমি প্যাটার্ন চিত্র ব্যবহার করে আমার ব্যাকগ্রাউন্ডের জন্য একটি ইউআইভিউ চিত্র তৈরি করার চেষ্টা করছি। আমার যে কোডটি রয়েছে তা পুরোপুরি স্ক্রিনটি নেবে এই বিষয়টি বাদ দিয়ে আমি ভাল কাজ করি। আমার কোডটি এর মতো দেখাচ্ছে: self.view.backgroundColor = UIColor(patternImage: UIImage(named: "backgroundImage")!)

যে কেউ কীভাবে ব্যাকগ্রাউন্ডটিকে এমন চিত্র তৈরি করতে জানেন যা পুরো স্ক্রিনটি গ্রহণ করবে এবং বিভিন্ন আইফোন স্ক্রিনের আকারগুলিতে উপস্থিত হওয়ার সময় স্কেল করবে?


মনে রাখবেন যে:

আমি এই উত্তরটি আমার পুরানো অ্যাকাউন্ট থেকে পোস্ট করেছি (যা আমার জন্য অবহিত এবং আমি এটি আর অ্যাক্সেস করতে পারি না), এটি আমার উন্নত উত্তর ।

আপনি প্রতিটি ভিউতে আইবিআউটলেট তৈরির পরিবর্তে প্রোগ্রাম্যালি এটি করতে পারেন। কেবল একটি ইউআইভিউ extension তৈরি করুন (ফাইল -> নতুন -> ফাইল -> সুইফট ফাইল -> আপনি যা খুশি নাম দিন) এবং যুক্ত করুন:

extension UIView {
func addBackground() {
    // screen width and height:
    let width = UIScreen.mainScreen().bounds.size.width
    let height = UIScreen.mainScreen().bounds.size.height

    let imageViewBackground = UIImageView(frame: CGRectMake(0, 0, width, height))
    imageViewBackground.image = UIImage(named: "YOUR IMAGE NAME GOES HERE")

    // you can change the content mode:
    imageViewBackground.contentMode = UIViewContentMode.ScaleAspectFill

    self.addSubview(imageViewBackground)
    self.sendSubviewToBack(imageViewBackground)
}}

এখন, আপনি আপনার মতামত সহ এই পদ্ধতিটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addBackground()
}

আমি চিত্রটি "অটোলাআউট" তৈরি করতে বাধা ব্যবহার করেছি। আমি কোনও ক্রিয়াকলাপ সূচক (সম্পূর্ণ পটভূমির চিত্র সহ) দেখানোর জন্য একটি ভিউ তৈরি করেছি, যখন সিগু-তে দৃশ্যটি লোড হচ্ছে। কোডটি নিম্নরূপ।

var containerView: UIView = UIView()
var actionIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

private func showActivityIndicator() {
    ///first I set the containerView and the background image
    containerView.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubview(containerView)
    adjustConstFullSize(containerView, parentView: self.view)
    let backImage = UIImageView(image: UIImage(named: "AppBackImage"))
    backImage.contentMode = UIViewContentMode.ScaleAspectFill
    backImage.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(backImage)
    adjustConstFullSize(backImage, parentView: containerView)

    ////setting the spinner (activity indicator)
    actionIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0)
    actionIndicator.center = CGPointMake(containerView.bounds.size.width / 2, containerView.bounds.size.height / 2)
    actionIndicator.hidesWhenStopped = true
    actionIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge
    containerView.insertSubview(actionIndicator, aboveSubview: backImage)

    ///throw the container to the main view
    view.addSubview(containerView)
    actionIndicator.startAnimating()
}

এটি "অ্যাডজাস্টকনস্টফুলসাইজ" ফাংশনের কোড।

func adjustConstFullSize(adjustedView: UIView!, parentView: UIView!) {
    let topConstraint = NSLayoutConstraint(item: adjustedView,
        attribute: .Top,
        relatedBy: .Equal,
        toItem: parentView,
        attribute: .Top,
        multiplier: 1.0,
        constant: 0.0)

    let leftConstraint = NSLayoutConstraint(item: adjustedView,
        attribute: .Leading,
        relatedBy: .Equal,
        toItem: parentView,
        attribute: .Leading,
        multiplier: 1.0,
        constant: 0.0)

    let rightConstraint = NSLayoutConstraint(item: adjustedView,
        attribute: .Trailing,
        relatedBy: .Equal,
        toItem: parentView,
        attribute: .Trailing,
        multiplier: 1.0,
        constant: 0.0)


    let bottomConstraint = NSLayoutConstraint(item: adjustedView,
        attribute: .Bottom,
        relatedBy: .Equal,
        toItem: parentView,
        attribute: .Bottom,
        multiplier: 1.0,
        constant: 0.0)

    parentView.addConstraints([topConstraint, leftConstraint, rightConstraint, bottomConstraint])
}

উপরের দেখানো ফাংশনে, আমি কনটেইনারভিউটিকে মূল দৃশ্যের সীমাবদ্ধতার সাথে "বেঁধে" রেখেছি, যার ফলে ভিউটি "পূর্ণ আকার" তৈরি করে। আমি ইউআইআইমেজভিউয়ের জন্যও একই কাজ করেছি এবং কনটেন্টমোডকে এসপেক্টফিল এ সেটও করেছি - এটি গুরুত্বপূর্ণ, কারণ আমরা চিত্রটি প্রসারিত ছাড়াই সামগ্রীটি পূরণ করতে চাই।

অলস লোডিংয়ের পরে ভিউটি সরাতে কেবল নীচের কোডটি ব্যবহার করুন।

private func hideActivityIndicator() {
    actionIndicator.stopAnimating()
    containerView.removeFromSuperview()
}

এটি PureLayout ব্যবহার PureLayout । আপনি আরও কয়েকটি লাইন দিয়ে অটোলআউটটি ব্যবহার করতে পারেন।

UIImageView* imgView = UIImageView(image: myUIImage)
imgView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(imgView)
self.view.addConstraints(imgView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsMake(0,0,0,0))

স্কেলিংয়ের জন্য আপনার বিকল্পগুলি এখানে!

। কনটেন্টমড বৈশিষ্ট্যের জন্য:

ScaleToFill এটি চিত্রের সম্পূর্ণ সীমানা পূরণ করতে চিত্রের অভ্যন্তরের চিত্রটিকে স্কেল করবে।

ScaleAspectFit এটি নিশ্চিত করবে যে চিত্রের অভ্যন্তরের চিত্রটির সঠিক দিক অনুপাত থাকবে এবং চিত্রের সীমার অভ্যন্তরে ফিট হবে।

স্কেলএস্পেক্টফিল এটি নিশ্চিত করবে যে চিত্রের অভ্যন্তরের চিত্রটির সঠিক দিক অনুপাত থাকবে এবং চিত্রের দৃশ্যের পুরো সীমানা পূরণ করবে। এই মানটি সঠিকভাবে কাজ করার জন্য, নিশ্চিত হয়ে নিন যে আপনি চিত্রদর্শনটির ক্লিপটোবাউন্ডস বৈশিষ্ট্যটি সত্য করে রেখেছেন।

class SecondViewController : UIViewController {

    let backgroundImage = UIImage(named: "centralPark")
    var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.thirdChoiceField.delegate = self
        self.datePicker.minimumDate = NSDate()
        imageView = UIImageView(frame: view.bounds)
        imageView.contentMode = .ScaleAspectFill
        imageView.clipsToBounds = true
        imageView.image = backgroundImage
        imageView.center = view.center
        view.addSubview(imageView)
        self.view.sendSubviewToBack(imageView)

এটি আমার আগেরটির আপডেট হওয়া উত্তর।

আমার আগের উত্তরের একই পদ্ধতির হিসাবে, আপনি addBackground() একটি এক্সটেনশন তৈরি করতে এবং addBackground() পদ্ধতি যুক্ত করতে পারেন:

মনে রাখবেন: আপনি যদি এটি একটি নতুন .swift ফাইলটিতে যুক্ত করে থাকেন তবে import UIKit যুক্ত করতে মনে রাখবেন

extension UIView {
    func addBackground(imageName: String = "YOUR DEFAULT IMAGE NAME", contentMode: UIView.ContentMode = .scaleToFill) {
        // setup the UIImageView
        let backgroundImageView = UIImageView(frame: UIScreen.main.bounds)
        backgroundImageView.image = UIImage(named: imageName)
        backgroundImageView.contentMode = contentMode
        backgroundImageView.translatesAutoresizingMaskIntoConstraints = false

        addSubview(backgroundImageView)
        sendSubviewToBack(backgroundImageView)

        // adding NSLayoutConstraints
        let leadingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0.0)
        let trailingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0.0)
        let topConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0.0)
        let bottomConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0.0)

        NSLayoutConstraint.activate([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])
    }
}

মনে রাখবেন যে এই উত্তরের আপডেটগুলি হ'ল:

  • সুইফট 4 কোড 🙂
  • যোগসূত্র-এনআরএলআউটআউট কনট্রেনটগুলি : এটি কারণ কারণ আমার আগের উত্তরে যা বর্ণিত হয়েছে তা প্রয়োগ করার পরে এটি বর্তমান ডিভাইস ওরিয়েন্টেশনের জন্য ঠিক কাজ করে, তবে যখন অ্যাপ্লিকেশন প্রতিকৃতি / ল্যান্ডস্কেপ উভয় মোড সমর্থন করে না , যদি ডিভাইসের অবস্থান পরিবর্তন করা হয়েছে, ব্যাকগ্রাউন্ড চিত্রটি দেখুন আকার একই (একই আকার) হবে এবং ডিভাইসের স্ক্রিনের নতুন প্রস্থ / উচ্চতাটিকে মানাবে না, সুতরাং সীমাবদ্ধতা যুক্ত করা এই সমস্যার সমাধান করবে।
  • ডিফল্ট প্যারামিটার যুক্ত করা: আরও নমনীয়তার জন্য, আপনি কিছু সময়- আপনার পটভূমির জন্য ডিফল্ট চিত্র বা এমনকি প্রসঙ্গ মোডও পরিবর্তন করতে চান:

ব্যবহার:

ধরে viewDidLoad() যে আপনি এটিকে viewDidLoad() কল করতে চান:

override func viewDidLoad() {
    //...

    // you can call 4 versions of addBackground() method

    // 1- this will add it with the default imageName and default contextMode
    view.addBackground()

    // 2- this will add it with the edited imageName and default contextMode
    view.addBackground(imageName: "NEW IMAGE NAME")

    // 3- this will add it with the default imageName and edited contextMode
    view.addBackground(contentMode: .scaleAspectFit)

    // 4- this will add it with the default imageName and edited contextMode
    view.addBackground(imageName: "NEW IMAGE NAME", contextMode: .scaleAspectFit)
}




background-image