Saya ingin mengubah anchorPoint
, tetapi menyimpan tampilan di tempat yang sama. Saya sudah mencoba NSLog
-ing self.layer.position
dan self.center
dan mereka berdua tinggal sama terlepas dari perubahan anchorPoint tersebut. Namun pandangan saya bergerak!
Ada tips tentang cara melakukan ini?
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);
Outputnya adalah:
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
sumber
anchorPoint
danposition
terkait bersama?Saya memiliki masalah yang sama. Solusi Brad Larson bekerja sangat baik bahkan ketika pandangan diputar. Ini solusinya diterjemahkan ke dalam kode.
Dan setara dengan cepat:
sumber
Kunci untuk menyelesaikan ini adalah dengan menggunakan properti frame, yang anehnya adalah satu-satunya hal yang berubah.
Cepat 2
Cepat 3
Lalu saya melakukan resize saya, di mana ia mengukur dari anchorPoint. Maka saya harus mengembalikan anchorPoint lama;
Cepat 2
Cepat 3
EDIT: ini serpihan jika tampilan diputar, karena properti bingkai tidak terdefinisi jika CGAffineTransform telah diterapkan.
sumber
Bagi saya pengertian
position
dananchorPoint
termudah ketika saya mulai membandingkannya dengan pemahaman saya tentang frame.origin di UIView. UIView dengan frame.origin = (20,30) berarti bahwa UIView adalah 20 poin dari kiri dan 30 poin dari atas tampilan induknya. Jarak ini dihitung dari titik mana dari UIView? Ini dihitung dari sudut kiri atas UIView.Dalam lapisan
anchorPoint
menandai titik (dalam bentuk normal yaitu 0 sampai 1) dari mana jarak ini dihitung jadi misal layer.position = (20, 30) berarti bahwa lapisan tersebutanchorPoint
adalah 20 titik dari kiri dan 30 poin dari atas lapisan induknya. Secara default, anchorPoint layer adalah (0,5, 0,5) sehingga titik kalkulasi jarak tepat di tengah-tengah layer. Gambar berikut akan membantu memperjelas poin saya:anchorPoint
juga merupakan titik di mana rotasi akan terjadi jika Anda menerapkan transformasi ke layer.sumber
Ada solusi yang sangat sederhana. Ini berdasarkan jawaban Kenny. Tetapi alih-alih menerapkan bingkai yang lama, gunakan yang asli dan yang baru untuk menghitung terjemahan, lalu terapkan terjemahan itu ke tengah. Ini bekerja dengan tampilan yang diputar juga! Inilah kodenya, jauh lebih sederhana daripada solusi lain:
sumber
Bagi mereka yang membutuhkannya, inilah solusi Magnus di Swift:
sumber
view.setTranslatesAutoresizingMaskIntoConstraints(true)
. Terima kasihview.setTranslatesAutoresizingMaskIntoConstraints(true)
diperlukan saat menggunakan batasan tata letak otomatis.translatesAutoresizingMaskIntoConstraints
adalah hanya apa yang saya hilang, bisa belajar sekarangBerikut adalah jawaban pengguna945711 yang disesuaikan untuk NSView pada OS X. Selain NSView tidak memiliki
.center
properti, bingkai NSView tidak berubah (mungkin karena NSViews tidak datang dengan CALayer secara default) tetapi asal bingkai CALayer berubah ketika anchorPoint diubah.sumber
Jika Anda mengubah anchorPoint, posisinya juga akan berubah, KECUALI asalnya adalah titik nol
CGPointZero
.sumber
Edit dan Lihat Anchor Point UIView Tepat di Storyboard (Swift 3)
Ini adalah solusi alternatif yang memungkinkan Anda untuk mengubah titik jangkar melalui Inspektur Atribut dan memiliki properti lain untuk melihat titik jangkar untuk konfirmasi.
Buat file baru untuk dimasukkan dalam proyek Anda
Tambahkan View ke Storyboard dan atur Kelas Kustom
Sekarang atur New Anchor Point untuk UIView
Mengaktifkan Show Anchor Point akan menampilkan titik merah sehingga Anda bisa lebih baik melihat di mana anchor point akan terlihat secara visual. Anda selalu dapat mematikannya nanti.
Ini sangat membantu saya ketika merencanakan transformasi pada UIViews.
sumber
Untuk Swift 3:
sumber
Memperluas jawaban Magnus yang hebat & menyeluruh, saya telah membuat versi yang berfungsi pada sub lapisan:
sumber