Bagaimana cara mengubah fase pola saat menggunakan [UIColor colorWithPatternImage:]?

Saya menggunakan [UIColor colorWithPatternImage:] untuk mengatur gambar latar belakang untuk UITableViewCell yang saya kelompokkan. Saya mendapatkan sudut membulat gratis untuk sel saya dan semuanya tampak bagus, sampai saya mencoba memberikan ketinggian yang berbeda pada sel.

Idealnya, saya ingin gambar latar belakang berada di tengah secara vertikal, namun metode colorWithPatternImage: memulai pola gambar dari sudut kiri bawah, yang membuat sel saya terlihat buruk.

Dikatakan dalam dokumentasi itu

"Secara default, fase warna yang dikembalikan adalah 0, yang menyebabkan sudut kiri atas gambar sejajar dengan asal gambar. Untuk mengubah fase, jadikan warna menjadi warna saat ini lalu gunakan CGContextSetPatternPhase berfungsi untuk mengubah fase."

Tapi saya tidak tahu bagaimana menggunakan CGContextSetPatternPhase dengan implementasi saya saat ini.

Saya mencoba

- (void)drawRect:(CGRect)rect 
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    CGSize phase = CGSizeMake(50, 50);
    CGContextSetPatternPhase(context, phase);

    UIImage* image = [UIImage imageNamed:@"cell_background"];

    UIColor* color = [UIColor colorWithPatternImage:image];

    self.backgroundColor = color;

    CGContextRestoreGState(context);

    [super drawRect:rect];
}

Tapi itu tidak berpengaruh apa pun pada fase pola. Adakah yang bisa memberi tahu saya bagaimana cara menggunakannya?

Terimakasih banyak,

Yusuf


person Joseph Lin    schedule 06.07.2011    source sumber


Jawaban (1)


Panggilan Core Graphics umumnya digunakan sebagai bagian dari proses menggambar tertentu; pengaturan properti backgroundColor tidak benar-benar menggambar apa pun, itu hanya mengatur bagaimana tampilan menggambar dirinya sendiri secara default. Panduan Pemrograman Kuarsa 2D memiliki penjelasan tentang caranya menggambar menggunakan gambar pola; Anda mungkin dapat mengambil jalan pintas melalui

CGColorRef color = [UIColor colorWithPatternImage:image].CGColor;
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, self.bounds);

…tapi saya tidak menjaminnya, karena pola UIColor mungkin tidak cocok dengan Core Graphics. Anda mungkin harus mengambil rute yang lebih rumit yang dijelaskan pada tautan di atas.

person Noah Witherspoon    schedule 06.07.2011
comment
Terima kasih Noah, itu memang mengubah fase polanya. Sayangnya, ini tidak berlaku untuk situasi saya karena drawRect: menggambar pada lapisan paling belakang sel dan saya kehilangan sudut membulat dan sebagainya. Tapi saya pikir saya harus membuka pertanyaan lain untuk itu. - person Joseph Lin; 07.07.2011