আমার কালায়ারের অ্যাঙ্করপয়েন্টটি পরিবর্তন করা দর্শনটিকে সরিয়ে দেয়


131

আমি পরিবর্তন করতে চাই anchorPoint, তবে একই স্থানে দৃষ্টিভঙ্গি রাখতে চাই । আমি চেষ্টা করেছি NSLog-ing self.layer.positionএবংself.center তাঁদের উভয়েরই থাকার anchorPoint পরিবর্তন নির্বিশেষে একই। তবুও আমার দৃষ্টিভঙ্গি চলে!

এটি কিভাবে করবেন তার কোনও পরামর্শ?

self.layer.anchorPoint = CGPointMake(0.5, 0.5);
NSLog(@"center point: %f %f", self.layer.position.x, self.layer.position.y);
self.layer.anchorPoint = CGPointMake(1, 1);
NSLog(@"center point: %f %f", self.layer.position.x, self.layer.position.y);

আউটপুটটি হ'ল:

2009-12-27 20:43:24.161 Type[11289:207] center point: 272.500000 242.500000
2009-12-27 20:43:24.162 Type[11289:207] center point: 272.500000 242.500000

উত্তর:


139

লেয়ার জ্যামিতি এবং রূপান্তর কোর অ্যানিমেশন প্রোগ্রামিং গাইডের অংশে CALayer অবস্থান ও anchorPoint বৈশিষ্ট্য মধ্যে সম্পর্ক ব্যাখ্যা করে। মূলত, স্তরটির অ্যাঙ্করপয়েন্টের অবস্থানের ক্ষেত্রে কোনও স্তরের অবস্থান নির্দিষ্ট করা হয়। ডিফল্টরূপে, একটি স্তরের অ্যাঙ্করপয়েন্টটি (0.5, 0.5), যা স্তরটির কেন্দ্রে অবস্থিত। আপনি যখন স্তরটির অবস্থান নির্ধারণ করেন, আপনি তার স্তরের কেন্দ্রের স্থানে তার সুপারলায়ারের সমন্বয় সিস্টেমে অবস্থান নির্ধারণ করেন।

কারণ অবস্থানটি স্তরটির অ্যাঙ্করপয়েন্টের সাথে তুলনামূলক, একই অবস্থান বজায় রেখে সেই অ্যাঙ্করপয়েন্টটি পরিবর্তন করে স্তরটি সরায় moves এই চলাচল প্রতিরোধ করার জন্য আপনাকে নতুন অ্যাঙ্করপয়েন্টের জন্য অ্যাকাউন্টের স্তরটির অবস্থান সামঞ্জস্য করতে হবে। এটি করার একটি উপায় হ'ল স্তরের গণ্ডি দখল করা, পুরাতন এবং নতুন অ্যাঙ্করপয়েন্টের নরমালিকৃত মানগুলির সাথে সীমাগুলির প্রস্থ এবং উচ্চতাকে গুণ করা, দুটি অ্যাঙ্করপয়েন্টের পার্থক্য গ্রহণ করুন এবং স্তরটির অবস্থানের সাথে এই পার্থক্যটি প্রয়োগ করুন।

এমনকি আপনি CGPointApplyAffineTransform()আপনার ইউআইভিউ-র সিজিএফাইন ট্রান্সফর্ম ব্যবহার করে এইভাবে ঘোরার জন্য অ্যাকাউন্ট করতে সক্ষম হতে পারেন।


4
ব্র্যাডের উত্তরটি উদ্দেশ্য-সি তে কীভাবে প্রয়োগ করা যেতে পারে তা দেখার জন্য ম্যাগনাসের উদাহরণ ফাংশন দেখুন।
জিম জেফার্স

ধন্যবাদ কিন্তু আমি বুঝতে পারছি না কিভাবে anchorPointএবং positionএকসঙ্গে সম্পর্কিত?
dumbfingers

6
@ ss1271 - আমি উপরে বর্ণিত হিসাবে, একটি স্তরের অ্যাঙ্করপয়েন্টটি এর সমন্বিত সিস্টেমের ভিত্তি। যদি এটি সেট করা থাকে (০.০, ০.০), আপনি যখন কোনও স্তরের অবস্থান নির্ধারণ করবেন তখন আপনি সেট করছেন যে এটির কেন্দ্রটি তার সুপারলেয়ারের স্থানাঙ্ক সিস্টেমে থাকবে। যদি আপনি অ্যাঙ্কারপয়েন্টটি (0.0, 0.5) এ সেট করেন তবে অবস্থান নির্ধারণের সাথে তার বাম প্রান্তের কেন্দ্রটি যেখানে সেট করা হবে। আবার, উপরের লিঙ্কযুক্ত ডকুমেন্টেশনে অ্যাপলের কয়েকটি সুন্দর চিত্র রয়েছে (যা আমি উল্লেখটি আপডেট করেছি)।
ব্র্যাড লারসন

আমি ম্যাগনাস দ্বারা সরবরাহিত পদ্ধতিটি ব্যবহার করেছি। আমি যখন এনএসলগের অবস্থান এবং ফ্রেমগুলিকে সঠিক দেখায় তবে আমার দৃষ্টিভঙ্গি এখনও সরিয়ে নেওয়া হয়েছে। কোন ধারণা কেন? এটি নতুন অবস্থানটিকে বিবেচনায় না নেওয়ার মতো।
অ্যালেক্সিস

আমার ক্ষেত্রে আমি AVVideoCompositionCoreAnimationTool ক্লাসের ভিডিওকম্পোজেশন কোর অ্যানিমেশনটুল উইথপোস্টপ্রসেসিংএএসভিডিওলায়ার পদ্ধতি ব্যবহার করে স্তরে একটি অ্যানিমেশন যুক্ত করতে চাই। যা হয় তা হ'ল আমি যখন আঞ্চলিক এবং অক্ষের চারপাশে ঘুরিয়ে দিচ্ছি তখন আমার স্তরটির অর্ধেক অংশ অদৃশ্য হয়ে যায়।
এনআর 5

205

আমারও একই সমস্যা ছিল। ব্রাড লারসনের সমাধান ভিউটি ঘোরানো হলেও দুর্দান্ত কাজ করেছিল। কোডটিতে অনুবাদ করা তার সমাধান এখানে।

-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, 
                                   view.bounds.size.height * anchorPoint.y);
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, 
                                   view.bounds.size.height * view.layer.anchorPoint.y);

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);

    CGPoint position = view.layer.position;

    position.x -= oldPoint.x;
    position.x += newPoint.x;

    position.y -= oldPoint.y;
    position.y += newPoint.y;

    view.layer.position = position;
    view.layer.anchorPoint = anchorPoint;
}

এবং দ্রুত সমতুল্য:

func setAnchorPoint(anchorPoint: CGPoint, forView view: UIView) {
    var newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y)
    var oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y)

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform)
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform)

    var position = view.layer.position
    position.x -= oldPoint.x
    position.x += newPoint.x

    position.y -= oldPoint.y
    position.y += newPoint.y

    view.layer.position = position
    view.layer.anchorPoint = anchorPoint
}

সুইট 4.x

func setAnchorPoint(anchorPoint: CGPoint, forView view: UIView) {
    var newPoint = CGPoint(x: view.bounds.size.width * anchorPoint.x,
                           y: view.bounds.size.height * anchorPoint.y)


    var oldPoint = CGPoint(x: view.bounds.size.width * view.layer.anchorPoint.x,
                           y: view.bounds.size.height * view.layer.anchorPoint.y)

    newPoint = newPoint.applying(view.transform)
    oldPoint = oldPoint.applying(view.transform)

    var position = view.layer.position
    position.x -= oldPoint.x
    position.x += newPoint.x

    position.y -= oldPoint.y
    position.y += newPoint.y

    view.layer.position = position
    view.layer.anchorPoint = anchorPoint
}

2
একবার আমি এখানে আপনার উদাহরণ দেখতে সক্ষম হয়ে নিখুঁত এবং সম্পূর্ণ জ্ঞান অর্জন করে। এর জন্য ধন্যবাদ!
জিম জেফার্স

2
আমি এই কোডটি আমার জাগ্রত থেকে ফ্রেমনিব / ইনজিওফ্রেম পদ্ধতিতে ব্যবহার করি, তবে এটি এখনও কার্যকর হয় না, আমার কী ডিসপ্লে আপডেট করার দরকার আছে? সম্পাদনা করুন: setNeedsDisplay কাজ করে না
অ্যাডাম কার্টার

2
আপনি কেন ভিউবাউন্ডস ব্যবহার করছেন? আপনি স্তর.বাউন্ডস ব্যবহার করা উচিত নয়?
জাকদানস

1
আমার ক্ষেত্রে মানটির মানটি: ভিউ.লেয়ার.পজিশনে কোনও পরিবর্তন হয় না
অ্যান্ড্রুকে

5
এফডব্লিউআইডাব্লু, এটি কাজ করার জন্য আমাকে একটি সেটচ্যান্সার পদ্ধতিটি একটি ডিসপাচ_্যাসিঙ্ক ব্লকে আবদ্ধ করতে হয়েছিল। নিশ্চিত না কেন আমি কেন এটি ভিডিডলিডের ভিতরে ডাকছি calling ভিউডিডলড এখন আর মূল থ্রেডের কাতারে নেই?
জন ফোলার

44

এটি সমাধানের মূল বিষয় হ'ল ফ্রেম সম্পত্তি ব্যবহার করা যা অদ্ভুতভাবে একমাত্র জিনিস যা পরিবর্তিত হয়।

সুইফট 2

let oldFrame = self.frame
self.layer.anchorPoint = CGPointMake(1, 1)
self.frame = oldFrame

সুইফট 3

let oldFrame = self.frame
self.layer.anchorPoint = CGPoint(x: 1, y: 1)
self.frame = oldFrame

তারপরে আমি আমার আকার পরিবর্তন করি, যেখানে এটি অ্যাঙ্করপয়েন্ট থেকে স্কেল করে। তারপরে আমাকে পুরানো অ্যাঙ্করপয়েন্টটি পুনরুদ্ধার করতে হবে;

সুইফট 2

let oldFrame = self.frame
self.layer.anchorPoint = CGPointMake(0.5,0.5)
self.frame = oldFrame

সুইফট 3

let oldFrame = self.frame
self.layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.frame = oldFrame

সম্পাদনা করুন: ভিজিটি ঘোরানো হলে এই flakes আউট, যদি একটি সিজিএফাইন ট্রান্সফর্ম প্রয়োগ করা থাকে তবে ফ্রেমের সম্পত্তি অপরিজ্ঞাত করা হয়।


9
এটি কেবল যুক্ত করতে চেয়েছিল কেন এটি কাজ করে এবং সবচেয়ে সহজ উপায় বলে মনে হচ্ছে: ডক্স অনুসারে ফ্রেম সম্পত্তিটি একটি "রচিত" সম্পত্তি: "ফ্রেমের মান সীমানা, অ্যাঙ্করপয়েন্ট এবং অবস্থানের বৈশিষ্ট্য থেকে উদ্ভূত" " এজন্যই "ফ্রেম" সম্পত্তি অ্যানিম্যাটযোগ্য নয়।
ডার্কডাস্ট

1
এটি সত্যই আমার পছন্দসই পদ্ধতি। আপনি যদি সীমা এবং অবস্থানটি স্বাধীনভাবে পরিচালনা করতে বা সেগুলির কোনওটিকে অ্যানিমেট করার চেষ্টা না করে থাকেন, তবে অ্যাঙ্কর পয়েন্ট পরিবর্তন করার আগে কেবল ফ্রেম ক্যাপচার করা যথেষ্ট usually কোনও গণিতের প্রয়োজন নেই।
সিআইফিল্টার

28

আমার বোঝার জন্য positionএবং anchorPointআমি যখন ইউআইভিউতে ফ্রেম.রিগিন সম্পর্কে আমার বোঝার সাথে এটি তুলনা করতে শুরু করি তখন সবচেয়ে সহজ ছিল। ফ্রেম.রিগিন = (20,30) সহ একটি ইউআইভিউ মানে ইউআইভিউউটি বাম দিক থেকে 20 পয়েন্ট এবং এর প্যারেন্ট ভিউয়ের শীর্ষ থেকে 30 পয়েন্ট। এই দূরত্বটি কোনও ইউআইভিউয়ের কোন বিন্দু থেকে গণনা করা হয়? এটি কোনও ইউআইভিউর শীর্ষ-বাম কোণ থেকে গণনা করা হয়।

স্তরটিতে anchorPointবিন্দুটি চিহ্নিত করা হয় (স্বাভাবিক আকারে অর্থাৎ 0 থেকে 1) যেখানে থেকে এই দূরত্বটি গণনা করা হয় সুতরাং যেমন স্তর.পজিশন = (20, 30) মানে স্তরটি anchorPointবাম দিক থেকে 20 পয়েন্ট এবং তার মূল স্তরের শীর্ষ থেকে 30 পয়েন্ট। ডিফল্টরূপে একটি স্তর অ্যাঙ্করপয়েন্ট (0.5, 0.5) তাই দূরত্বের গণনা পয়েন্টটি স্তরটির ঠিক মাঝখানে থাকে। নিম্নলিখিত চিত্রটি আমার বক্তব্য পরিষ্কার করতে সহায়তা করবে:

এখানে চিত্র বর্ণনা লিখুন

anchorPoint আপনি স্তরে কোনও রূপান্তর প্রয়োগের ক্ষেত্রে ঘূর্ণনটি ঘটবে সেই বিন্দুটিও ঘটে।


1
দয়া করে আপনি বলতে পারেন যে আমি কীভাবে এই অ্যাঙ্গার পয়েন্ট জাম্পিংটি সমাধান করতে পারি যিনি ইউআইভিউ যিনি অটো লেআউটটি ব্যবহার করে সেট করেছেন, তার অর্থ অটো লেআউট সহ আমরা ফ্রেম এবং সীমানা বৈশিষ্ট্য পেতে বা সেট করতে পারি না।
এসজে

17

এরকম একটি সহজ সমাধান রয়েছে। এটি কেনির উত্তরের উপর ভিত্তি করে। তবে পুরানো ফ্রেমটি প্রয়োগ করার পরিবর্তে অনুবাদটি গণনা করার জন্য এটির উত্স এবং নতুনটি ব্যবহার করুন, তারপরে সেই অনুবাদটি কেন্দ্রে প্রয়োগ করুন। এটি ঘোরানো ভিউয়ের সাথেও কাজ করে! কোডগুলি এখানে, অন্য সমাধানগুলির তুলনায় অনেক সহজ:

func setAnchorPoint(anchorPoint: CGPoint, view: UIView) {
   let oldOrigin = view.frame.origin
   view.layer.anchorPoint = anchorPoint
   let newOrigin = view.frame.origin

   let translation = CGPoint(x: newOrigin.x - oldOrigin.x, y: newOrigin.y - oldOrigin.y)

   view.center = CGPoint(x: view.center.x - translation.x, y: view.center.y - translation.y)
}

2
দুর্দান্ত সামান্য পদ্ধতি ... বেশ কয়েকটি ছোটখাট সংশোধনগুলি ঠিক আছে: লাইন 3: অ্যাঙ্করপয়েন্টে মূলধন পি। লাইন 8: ট্রান্স.ওয়াই = নতুন - ওল্ড
বব

2
তবুও আমি বিভ্রান্তিতে আছি আমি কীভাবে এটি ব্যবহার করতে পারি। উয়েজস্টেরোটেশন দিয়ে আমার ভিউ ঘোরানোর জন্য আমি এখনই একই সমস্যার মুখোমুখি। আমি অদ্ভুত যে আমি এই পদ্ধতিটি কল করা উচিত যেখানে। আমি যদি অঙ্গভঙ্গি সনাক্তকারী হ্যান্ডলারে কল করছি। এটি দৃশ্য অদৃশ্য করে তোলে।
জ্যাক

3
এই উত্তরটি খুব মিষ্টি আমার এখন ডায়াবেটিস আছে।
জেনকোড

14

যাদের এটির প্রয়োজন তাদের জন্য এখানে সুইফটে ম্যাগনাসের সমাধান রয়েছে:

func setAnchorPoint(anchorPoint: CGPoint, view: UIView) {
    var newPoint: CGPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y)
    var oldPoint: CGPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y)

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform)
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform)

    var position: CGPoint = view.layer.position

    position.x -= oldPoint.x
    position.x += newPoint.x

    position.y -= oldPoint.y
    position.y += newPoint.y

    view.setTranslatesAutoresizingMaskIntoConstraints(true)     // Added to deal with auto layout constraints
    view.layer.anchorPoint = anchorPoint
    view.layer.position = position
}

1
upvote জন্য view.setTranslatesAutoresizingMaskIntoConstraints(true)। ধন্যবাদ মানুষ
অস্কার ইউয়ান্ডিনটা

1
view.setTranslatesAutoresizingMaskIntoConstraints(true)স্বয়ংক্রিয় বিন্যাসের সীমাবদ্ধতাগুলি ব্যবহার করার সময় প্রয়োজনীয়।
সমীরচেন

1
এই জন্য আপনাকে অনেক ধন্যবাদ! translatesAutoresizingMaskIntoConstraintsশুধু কি আমি অনুপস্থিত ছিল, এখন দ্বারা শিখেছি করেছি পারে
Ziga

5

এখানে ইউজার 945711 এর উত্তরটি ওএস এক্সে এনএসভিউয়ের জন্য সামঞ্জস্য করা হয়েছে N এনএসভিউর কোনও .centerসম্পত্তি না থাকা ছাড়াও এনএসভিউয়ের ফ্রেম পরিবর্তিত হয় না (সম্ভবত এনএসভিউগুলি ডিফল্টরূপে কোনও ক্যালায়ার নিয়ে আসে না) তবে অ্যাঙ্করপয়েন্টটি পরিবর্তিত হলে CALayer ফ্রেমের উত্স পরিবর্তিত হয়।

func setAnchorPoint(anchorPoint: NSPoint, view: NSView) {
    guard let layer = view.layer else { return }

    let oldOrigin = layer.frame.origin
    layer.anchorPoint = anchorPoint
    let newOrigin = layer.frame.origin

    let transition = NSMakePoint(newOrigin.x - oldOrigin.x, newOrigin.y - oldOrigin.y)
    layer.frame.origin = NSMakePoint(layer.frame.origin.x - transition.x, layer.frame.origin.y - transition.y)
}

4

যদি আপনি অ্যাঙ্করপয়েন্টটি পরিবর্তন করেন তবে এর অবস্থানটিও খুব বদলে যাবে, আপনার উত্স শূন্য পয়েন্টের নয় CGPointZero

position.x == origin.x + anchorPoint.x;
position.y == origin.y + anchorPoint.y;

1
আপনি অবস্থান এবং অ্যাঙ্করপয়েন্টটি তুলনা করতে পারবেন না, অ্যাঙ্করপয়েন্টটি স্কেল 0 থেকে 1.0 এর মধ্যে
এডওয়ার্ড অ্যান্টনি

4

ইউটিউভিউয়ের অ্যাঙ্কর পয়েন্টটি ডানদিকে স্টোরিবোর্ডে সম্পাদনা করুন এবং দেখুন (সুইফট 3)

এটি একটি বিকল্প সমাধান যা আপনাকে অ্যাট্রিবিউটস ইন্সপেক্টরটির মাধ্যমে অ্যাঙ্কর পয়েন্ট পরিবর্তন করতে দেয় এবং নিশ্চিতকরণের জন্য অ্যাঙ্কর পয়েন্ট দেখার জন্য আরও একটি সম্পত্তি রয়েছে।

আপনার প্রকল্পে অন্তর্ভুক্ত করতে নতুন ফাইল তৈরি করুন

import UIKit

@IBDesignable
class UIViewAnchorPoint: UIView {

    @IBInspectable var showAnchorPoint: Bool = false
    @IBInspectable var anchorPoint: CGPoint = CGPoint(x: 0.5, y: 0.5) {
        didSet {
            setAnchorPoint(anchorPoint: anchorPoint)
        }
    }

    override func draw(_ rect: CGRect) {
        if showAnchorPoint {
            let anchorPointlayer = CALayer()
            anchorPointlayer.backgroundColor = UIColor.red.cgColor
            anchorPointlayer.bounds = CGRect(x: 0, y: 0, width: 6, height: 6)
            anchorPointlayer.cornerRadius = 3

            let anchor = layer.anchorPoint
            let size = layer.bounds.size

            anchorPointlayer.position = CGPoint(x: anchor.x * size.width, y: anchor.y * size.height)
            layer.addSublayer(anchorPointlayer)
        }
    }

    func setAnchorPoint(anchorPoint: CGPoint) {
        var newPoint = CGPoint(x: bounds.size.width * anchorPoint.x, y: bounds.size.height * anchorPoint.y)
        var oldPoint = CGPoint(x: bounds.size.width * layer.anchorPoint.x, y: bounds.size.height * layer.anchorPoint.y)

        newPoint = newPoint.applying(transform)
        oldPoint = oldPoint.applying(transform)

        var position = layer.position
        position.x -= oldPoint.x
        position.x += newPoint.x

        position.y -= oldPoint.y
        position.y += newPoint.y

        layer.position = position
        layer.anchorPoint = anchorPoint
    }
}

স্টোরিবোর্ডে ভিউ যুক্ত করুন এবং কাস্টম ক্লাস সেট করুন

কাস্টম ক্লাস

এখন ইউআইভিউয়ের জন্য নতুন অ্যাঙ্কর পয়েন্ট সেট করুন

প্রদর্শন

শো অ্যাঙ্কর পয়েন্টটি চালু করা একটি লাল বিন্দু প্রদর্শন করবে যাতে অ্যাঙ্কর পয়েন্টটি দৃশ্যত কোথায় থাকবে তা আপনি আরও ভাল করে দেখতে পারবেন। আপনি সর্বদা এটি পরে বন্ধ করতে পারেন।

ইউআইভিউতে রূপান্তর করার পরিকল্পনা করার সময় এটি আমাকে সত্যই সহায়তা করেছিল।


ইউআইভিউ-তে কোনও বিন্দু নয়, আমি সুইফটের সাথে অবজেক্টিভ-সি ব্যবহার করেছি, আপনার কোড থেকে ইউআইভিউ কাস্টম ক্লাস সংযুক্ত করেছি এবং শো অ্যাঞ্চে স্যুইচ করেছি ... তবে কোনও বিন্দু নেই
জেনেভিওস

1

সুইফ্ট 3 এর জন্য:

func setAnchorPoint(_ anchorPoint: CGPoint, forView view: UIView) {
    var newPoint = CGPoint(x: view.bounds.size.width * anchorPoint.x, y: view.bounds.size.height * anchorPoint.y)
    var oldPoint = CGPoint(x: view.bounds.size.width * view.layer.anchorPoint.x, y: view.bounds.size.height * view.layer.anchorPoint.y)

    newPoint = newPoint.applying(view.transform)
    oldPoint = oldPoint.applying(view.transform)

    var position = view.layer.position
    position.x -= oldPoint.x
    position.x += newPoint.x

    position.y -= oldPoint.y
    position.y += newPoint.y

    view.layer.position = position
    view.layer.anchorPoint = anchorPoint
}

1
এর জন্য আপনাকে ধন্যবাদ :) আমি এটি কেবলমাত্র আমার প্রজেক্টে একটি স্ট্যাটিক ফানক হিসাবে পেস্ট করেছি এবং একটি কবজির মতো কাজ করি: ডি
কেজেল

0

ম্যাগনাসের দুর্দান্ত এবং পুঙ্খানুপুঙ্খ উত্তরের উপর প্রসারিত করে আমি একটি সংস্করণ তৈরি করেছি যা সাব স্তরগুলিতে কাজ করে:

-(void)setAnchorPoint:(CGPoint)anchorPoint forLayer:(CALayer *)layer
{
    CGPoint newPoint = CGPointMake(layer.bounds.size.width * anchorPoint.x, layer.bounds.size.height * anchorPoint.y);
    CGPoint oldPoint = CGPointMake(layer.bounds.size.width * layer.anchorPoint.x, layer.bounds.size.height * layer.anchorPoint.y);
    CGPoint position = layer.position;
    position.x -= oldPoint.x;
    position.x += newPoint.x;
    position.y -= oldPoint.y;
    position.y += newPoint.y;
    layer.position = position;
    layer.anchorPoint = anchorPoint;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.