Menggunakan kelas UIPopoverBackgroundView

Apple tidak memiliki dokumentasi tentang cara menggunakan kelas UIPopoverBackgroundView yang diperkenalkan di iOS5. Adakah yang punya contoh?

Saya telah mencoba membuat subkelasnya, tetapi XCode 4.2 saya di Lion hilang UIPopoverBackgroundView.h

Sunting: Tidak mengherankan, ini seharusnya diimpor sebagai #import <UIKit/UIPopoverBackgroundView.h>


person Andrew Kolesnikov    schedule 20.11.2011    source sumber
comment
Apakah Anda yakin tidak dapat menemukan dokumentasinya?: developer.apple.com/library/IOs/#documentation/UIKit/Reference/   -  person CodaFi    schedule 21.11.2011
comment
CodaFI sudah menjawab tentang dokumentasi...subyek lainnya adalah contoh ini, blog.brandoncopley.com/?p= 72 semoga berhasil   -  person silvaric    schedule 22.11.2011
comment
Mungkin mencari SDK yang salah?   -  person Constantino Tsarouhas    schedule 22.11.2011
comment
Terima kasih untuk #import ‹UIKit/UIPopoverBackgroundView.h› :)   -  person Cesar    schedule 02.01.2012
comment
Berikut tutorialnya   -  person Andrew Kolesnikov    schedule 12.04.2012


Jawaban (2)


Untuk menambah jawaban lain yang hanya berupa tautan, berikut cara melakukannya.

  • Buat subkelas baru UIPopoverBackgroundView
  • Deklarasikan yang berikut ini di antarmuka Anda:

    +(UIEdgeInsets)contentViewInsets;
    +(CGFloat)arrowHeight;
    +(CGFloat)arrowBase;
    
    @property(nonatomic,readwrite) CGFloat arrowOffset;
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
    
  • Metode kelasnya sangat mudah: contentViewInsets mengembalikan lebar batas sepanjang garis (tidak termasuk panah), arrowHeight adalah tinggi panah Anda, arrowBase adalah pangkal panah Anda.

  • Terapkan dua penentu properti, pastikan untuk memanggil [self setNeedsLayout].
  • Dalam metode inisialisasi Anda, buat dua tampilan gambar, satu memegang panah Anda (yang seharusnya merupakan ukuran dimensi panah dalam metode kelas Anda) dan satu lagi memegang gambar latar belakang Anda (yang harus berupa gambar yang dapat diubah ukurannya) dan menambahkannya sebagai subtampilan. Tidak masalah di mana Anda meletakkan subview pada titik ini, karena Anda tidak memiliki arah panah atau offset. Sebaiknya pastikan tampilan gambar panah berada di atas tampilan gambar latar belakang agar menyatu dengan baik.
  • Implement layoutSubviews. In here, according to the arrowDirection and arrowOffset properties, you have to adjust the frames of your background view and arrow view.
    • The frame of your background view should be self.bounds, inset by arrowHeight on whatever edge the arrow is on
    • Bingkai tampilan panah harus disejajarkan sehingga bagian tengahnya berjarak arrowOffset dari pusat self (benar sesuai dengan sumbunya). Anda harus mengubah orientasi gambar jika arah panah tidak naik, tetapi popover saya hanya naik jadi saya tidak melakukannya.

Berikut adalah metode layoutSubviews untuk subkelas Up-only saya:

-(void)layoutSubviews
{
    if (self.arrowDirection == UIPopoverArrowDirectionUp)
    {
        CGFloat height = [[self class] arrowHeight];
        CGFloat base = [[self class] arrowBase];

        self.background.frame = CGRectMake(0, height, self.frame.size.width, self.frame.size.height - height);

        self.arrow.frame = CGRectMake(self.frame.size.width * 0.5 + self.arrowOffset - base * 0.5, 1.0, base, height);
        [self bringSubviewToFront:self.arrow];

    }
}
person jrturton    schedule 07.09.2012

Hanya tautan lain yang menjawab, tetapi menyesuaikan UIPopoverBackgroundView lebih sulit daripada yang mungkin Anda sadari mengingat terbatasnya dokumentasi yang tersedia dan proyek github ini memiliki contoh kerja lengkap yang menghemat banyak waktu saya: https://github.com/GiK/GIKPopoverBackgroundView

Cukup mudah untuk terjun ke proyek Anda sendiri. Bagian yang paling rumit adalah mengadaptasi sisipan tutup untuk gambar khusus apa pun yang Anda gunakan. Saya akan merekomendasikan melakukan penyesuaian Anda di tempat dalam proyek dan karena mudah untuk memverifikasi semua kasus penggunaan orientasi/arah popover yang ditampilkan dengan benar di simulator sebelum memigrasikannya ke proyek Anda sendiri.

person user2067021    schedule 12.11.2015