আমি কীভাবে কোনও ইউআইভিউতে রূপান্তরিত রূপান্তর প্রয়োগ করব?


199

আমি একটি ইউআইভিউতে দৃষ্টিভঙ্গি রূপান্তর করতে দেখছি (যেমন কভারফ্লোতে দেখা গেছে)

কেউ কি জানেন যে এটি সম্ভব কিনা?

আমি ব্যবহার করে তদন্ত করেছি CALayerএবং সমস্ত ব্যবহারিক প্রোগ্রামার কোর অ্যানিমেশন পডকাস্ট ব্যবহার করেছি , তবে আইফোনটিতে এই ধরণের রূপান্তর কীভাবে তৈরি করা যায় সে সম্পর্কে আমি এখনও পরিষ্কার নই।

কোনও সহায়তা, পয়েন্টার বা উদাহরণ কোড স্নিপেটস সত্যিই প্রশংসা করা হবে!


এটি আপনার পক্ষে উপযুক্ত কিনা তা আমি নিশ্চিত নই তবে আমি যখন অ্যানিমেশন তৈরি করি তখন আমি খুঁজে পেলাম এম 14 আমার পক্ষে আরও রেফারেন্সের জন্য :)
বি 123400

ধন্যবাদ! - কোন মান আপনি এই দিতে?
নিক কার্টরাইট

1
এম 14 সেট করে আপনি এক্স অ্যাক্সেসের সাথে অদ্ভুতভাবে ভিউ হতাশ করছেন wing গণিতটি পুরোপুরি বৈধ তবে এটি সাধারণ ক্ষেত্রে জিনিসগুলিকে বিভ্রান্তিকর করে তুলবে।
ফ্লফি

এমএ 34 ফিল্ডের পুরো ব্যাখ্যা সহ ক্যালায়ার 3 ডি রূপান্তর এবং দৃষ্টিভঙ্গি সম্পর্কে একটি খুব, খুব ভাল নিবন্ধটি এই চমৎকার নিবন্ধে পাওয়া যাবে: কোর-অ্যানিমেশন
মার্কাস

উত্তর:


329

হিসাবে বেন বললেন, আপনার সাথে কাজ করতে হবে UIView's, স্তর একটি ব্যবহার CATransform3Dসম্পাদন করতে layer's rotation। কৌতুক দৃষ্টিকোণ কাজ করে তার জন্য, যেমন এখানে বর্ণিত , ম্যাট্রিক্স এক সরাসরি অ্যাক্সেস করতে হয় cellsএর CATransform3D(M34)। ম্যাট্রিক্স গণিত কখনও আমার জিনিস ছিল না, তাই আমি কেন এটি কাজ করে ঠিক তা ব্যাখ্যা করতে পারি না, তবে তা হয়। আপনার প্রাথমিক ট্রান্সফর্মের জন্য আপনাকে এই মানটি একটি নেতিবাচক ভগ্নাংশে সেট করতে হবে, তারপরে আপনার স্তর ঘূর্ণনটির রূপান্তরটি প্রয়োগ করুন। আপনি নিম্নলিখিতগুলি করতে সক্ষম হবেন:

উদ্দেশ্য গ

UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

সুইফ্ট 5.0

if let myView = self.subviews.first {
    let layer = myView.layer
    var rotationAndPerspectiveTransform = CATransform3DIdentity
    rotationAndPerspectiveTransform.m34 = 1.0 / -500
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0 * .pi / 180.0, 0.0, 1.0, 0.0)
    layer.transform = rotationAndPerspectiveTransform
}

যা প্রতিটি ঘোরার জন্য স্ক্র্যাচ থেকে স্তরটিকে রূপান্তর করে।

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

sublayerTransformআপনি আপনার প্রতিক্রিয়ায় পড়ুন একটি রুপান্তর আপনার এর sublayers প্রয়োগ করা হয় UIView's CALayer। আপনার যদি কোনও সাবলেয়ার না থাকে তবে এটি নিয়ে চিন্তা করবেন না। আমি আমার উদাহরণে সাবলেয়ার ট্রান্সফর্মটি কেবলমাত্র ব্যবহার করি কারণ আমি যে স্তরটি ঘুরছি তার মধ্যে দুটি CALayersস্তর রয়েছে।


1
ধন্যবাদ ব্র্যাড - আপনি একটি তারকা। পিএস: আপনার দুর্দান্ত উত্তরের জন্য দেরি করার জন্য দুঃখিত! নিক।
নিক কার্টরাইট

এটি আমার পক্ষে দুর্দান্তভাবে কাজ করে, আমি মনে করি ব্যতীত আমার অর্ধেক চিত্রটি (উল্লম্ব বিভাগের পাশাপাশি) - কখনও কখনও এলএইচএস, কখনও কখনও আরএইচএস হারিয়ে ফেলতে পারি।
আইপ্যাডডিফলার ২০১১

18
@ আইপ্যাডডিফলার ২০১১ - অদ্ভুতরূপে, একই প্লেনে যখন অন্য কোনও অস্বচ্ছ দৃশ্য বা স্তর থাকে তখন আপনি কোনও ভিউ বা স্তরটি ঘোরানোর চেষ্টা করছেন। আপনার দৃষ্টিভঙ্গি বা স্তরটির অর্ধেক যা স্ক্রীন থেকে দূরে চলেছে তা এই অন্য দর্শনের নীচে হবে এবং এভাবে লুকানো থাকবে। আপনি এটির প্রতিরোধ করতে আপনার ভিউ হায়ারার্কিকে পুনরায় অর্ডার করতে পারেন বা আপনার অগ্রভাগের দৃশ্যটি কেটে ফেলার চেয়ে উপরে উচ্চতর স্থানান্তর করতে zPosition বৈশিষ্ট্যটি ব্যবহার করতে পারেন।
ব্র্যাড লারসন

26
এফওয়াইআই, এম 34 সেলটি দৃষ্টিভঙ্গি রূপান্তরকে যে কারণে প্রভাবিত করে তা হ'ল ম্যাট্রিক্সের সেই সেলটি যে ক্লিপ-স্পেস ডাব্লু মান (যা দৃষ্টিভঙ্গি অভিক্ষেপের জন্য ব্যবহৃত হয়) বিশ্ব-স্থান জেড মানচিত্রকে কীভাবে প্রভাবিত করে। আরও তথ্যের জন্য সমজাতীয় রূপান্তর ম্যাট্রিকগুলি পড়ুন।
ফ্লফি

2
@ ইউরেসেগ - আপনি এটি আলাদা প্রশ্ন হিসাবে জিজ্ঞাসা করতে যাচ্ছেন, বিশেষত এমন চিত্রগুলির সাথে যা ঘটছে এবং আপনি কী হতে চান তা চিত্রিত করে।
ব্র্যাড লারসন

7

আপনি কেবলমাত্র ইউআরভিউর রূপান্তরকারী সম্পত্তিতে সরাসরি প্রয়োগ করা কোর গ্রাফিক্স (কেবল কোয়ার্টজ, 2 ডি) ব্যবহার করতে পারেন। কভারফ্লোতে প্রভাবগুলি পেতে, আপনাকে CATransform3D ব্যবহার করতে হবে, যা 3-ডি স্পেসে প্রয়োগ করা হয় এবং যাতে আপনি চান এমন দৃষ্টিকোণ প্রদর্শন করতে পারেন। আপনি কেবল স্তরগুলিতে কেবল CATransfor3Ds প্রয়োগ করতে পারবেন, দর্শন নয়, সুতরাং আপনাকে এটির জন্য স্তরগুলিতে স্যুইচ করতে হবে।

এক্সকোডের সাথে আসা "কভার্টফ্লো" নমুনাটি দেখুন। এটি কেবলমাত্র ম্যাক (যেমন আইফোনের জন্য নয়), তবে প্রচুর ধারণাটি ভালভাবে স্থানান্তর করে।


আমি সাফল্য ছাড়াই / বিকাশকারী / উদাহরণগুলিতে এই কভারফ্লো নমুনার সন্ধান করছি, আপনি এটি কোথায় পাবেন?
অ্যালেক্স

এটি আসলে "কভার্টফ্লো", এবং এটিতে / বিকাশকারী / উদাহরণসমূহ / কোয়ার্টজ / কোর অ্যানিমেশন / "
বেন গটলিয়েব

3

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

পোস্ট থেকে কিছু চিত্র এখানে দেওয়া হয়েছে:

.sublayerTransfor অপশন

.transfor অপশন


কোড পাঠ্য হিসাবে পোস্ট করা উচিত। কোনও ছবিতে কোড পড়া সত্যিই কঠিন। এছাড়াও কোনও ছবিতে কোড রেফারেন্স, অনুলিপি বা অনুসন্ধান করা যাবে না।
rmaddy

@ আরমড্ডি, আমার উত্তরে বিটবকেট লিঙ্কে কোড রয়েছে।
হুয়াথাম 23'18

লিঙ্কগুলি সময়ের সাথে সাথে খারাপ হয়। গুরুত্বপূর্ণ কোডটি সরাসরি উত্তরে পাঠ্য হিসাবে আটকানো সর্বদা সেরা।
rmaddy

-1

আপনি আইকারোসেল এসডিকে ব্যবহার করে সঠিক ক্যারোসেল প্রভাব পেতে পারেন।

আপনি দুর্দান্ত এবং ফ্রি আইকারোসেল লাইব্রেরি ব্যবহার করে আইওএসে তাত্ক্ষণিক কভার ফ্লো প্রভাব পেতে পারেন। আপনি এটি https://github.com/nicklockwood/iCarousel থেকে ডাউনলোড করতে পারেন এবং একটি ব্রিজিং শিরোলেখ যুক্ত করে এটি সহজেই আপনার এক্সকোড প্রকল্পে ফেলে দিতে পারেন (এটি উদ্দেশ্য-সিতে লেখা আছে) written

আপনি যদি আগে কোনও সুইফ্ট প্রকল্পে অবজেক্টিভ সি কোড যুক্ত না করেন তবে এই পদক্ষেপগুলি অনুসরণ করুন:

  • আইকারোসেল ডাউনলোড করুন এবং এটি আনজিপ করুন
  • আপনি আনজিপ করা ফোল্ডারে যান, তার আইকারোসেল সাবফোল্ডারটি খুলুন, তারপরে আইকারোসেল.এল এবং আইক্যারোসেল.এম নির্বাচন করুন এবং তাদের আপনার প্রকল্পের নেভিগেশনে টেনে আনুন - এটি এক্সকোডের বাম ফলক। ইনফটলিস্টের ঠিক নীচে ঠিক আছে।
  • "প্রয়োজনে আইটেমগুলি অনুলিপি করুন" চেক করুন তারপরে সমাপ্তি ক্লিক করুন।
  • এক্সকোড আপনাকে বার্তাটি জিজ্ঞাসা করবে "আপনি কি একটি উদ্দেশ্য-সি ব্রিজিং শিরোনাম কনফিগার করতে চান?" "ব্রিজিং শিরোলেখ তৈরি করুন" এ ক্লিক করুন আপনার প্রজেক্টনেম-ব্রিজিং-শিরোনাম h নামে আপনার প্রকল্পে একটি নতুন ফাইল দেখা উচিত।
  • এই লাইনটি ফাইলটিতে যুক্ত করুন:
  • একবার আপনি আপনার প্রকল্পে আইকারোসেল যুক্ত হয়ে গেলে আপনি এটি ব্যবহার শুরু করতে পারেন।
  • আপনি iCarouselDelegate এবং iCarouselDataSource প্রোটোকল উভয়ই মেনে চলছেন তা নিশ্চিত করুন।

সুইফট 3 নমুনা কোড:

    override func viewDidLoad() {
      super.viewDidLoad()
      let carousel = iCarousel(frame: CGRect(x: 0, y: 0, width: 300, height: 200))
      carousel.dataSource = self
      carousel.type = .coverFlow
      view.addSubview(carousel) 
    }

   func numberOfItems(in carousel: iCarousel) -> Int {
        return 10
    }

    func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
        let imageView: UIImageView

        if view != nil {
            imageView = view as! UIImageView
        } else {
            imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 128, height: 128))
        }

        imageView.image = UIImage(named: "example")

        return imageView
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.