Saya sedang mengembangkan aplikasi di mana saya ingin mengubah warna atau gambar UIPageControl
titik pagination. Bagaimana saya bisa mengubahnya? Apakah mungkin untuk menyesuaikan UIpageControl
skenario di atas?
sumber
Saya sedang mengembangkan aplikasi di mana saya ingin mengubah warna atau gambar UIPageControl
titik pagination. Bagaimana saya bisa mengubahnya? Apakah mungkin untuk menyesuaikan UIpageControl
skenario di atas?
MEMPERBARUI:
Jawaban ini berumur 6 tahun dan sangat ketinggalan zaman, tetapi masih menarik suara dan komentar. Sejak iOS 6.0 Anda harus menggunakan pageIndicatorTintColor
dan currentPageIndicatorTintColor
properti aktif UIPageControl
.
JAWABAN ASLI:
Saya mengalami masalah ini hari ini dan memutuskan untuk menulis kelas penggantian sederhana saya sendiri.
Ini adalah UIView subklas yang menggunakan Core Graphics untuk membuat titik-titik dalam warna yang Anda tentukan.
Anda menggunakan properti yang terbuka untuk menyesuaikan dan mengendalikannya.
Jika mau, Anda dapat mendaftarkan objek delegasi untuk mendapatkan notifikasi ketika pengguna mengetuk salah satu titik halaman kecil. Jika tidak ada delegasi terdaftar maka tampilan tidak akan bereaksi terhadap input sentuhan.
Ini benar-benar segar dari oven, tetapi tampaknya berhasil. Beri tahu saya jika Anda mengalami masalah dengannya.
Perbaikan di masa depan:
Contoh penggunaan:
CGRect f = CGRectMake(0, 0, 320, 20);
PageControl *pageControl = [[[PageControl alloc] initWithFrame:f] autorelease];
pageControl.numberOfPages = 10;
pageControl.currentPage = 5;
pageControl.delegate = self;
[self addSubview:pageControl];
File tajuk:
//
// PageControl.h
//
// Replacement for UIPageControl because that one only supports white dots.
//
// Created by Morten Heiberg <[email protected]> on November 1, 2010.
//
#import <UIKit/UIKit.h>
@protocol PageControlDelegate;
@interface PageControl : UIView
{
@private
NSInteger _currentPage;
NSInteger _numberOfPages;
UIColor *dotColorCurrentPage;
UIColor *dotColorOtherPage;
NSObject<PageControlDelegate> *delegate;
//If ARC use __unsafe_unretained id delegate;
}
// Set these to control the PageControl.
@property (nonatomic) NSInteger currentPage;
@property (nonatomic) NSInteger numberOfPages;
// Customize these as well as the backgroundColor property.
@property (nonatomic, retain) UIColor *dotColorCurrentPage;
@property (nonatomic, retain) UIColor *dotColorOtherPage;
// Optional delegate for callbacks when user taps a page dot.
@property (nonatomic, retain) NSObject<PageControlDelegate> *delegate;
@end
@protocol PageControlDelegate<NSObject>
@optional
- (void)pageControlPageDidChange:(PageControl *)pageControl;
@end
File implementasi:
//
// PageControl.m
//
// Replacement for UIPageControl because that one only supports white dots.
//
// Created by Morten Heiberg <[email protected]> on November 1, 2010.
//
#import "PageControl.h"
// Tweak these or make them dynamic.
#define kDotDiameter 7.0
#define kDotSpacer 7.0
@implementation PageControl
@synthesize dotColorCurrentPage;
@synthesize dotColorOtherPage;
@synthesize delegate;
- (NSInteger)currentPage
{
return _currentPage;
}
- (void)setCurrentPage:(NSInteger)page
{
_currentPage = MIN(MAX(0, page), _numberOfPages-1);
[self setNeedsDisplay];
}
- (NSInteger)numberOfPages
{
return _numberOfPages;
}
- (void)setNumberOfPages:(NSInteger)pages
{
_numberOfPages = MAX(0, pages);
_currentPage = MIN(MAX(0, _currentPage), _numberOfPages-1);
[self setNeedsDisplay];
}
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
// Default colors.
self.backgroundColor = [UIColor clearColor];
self.dotColorCurrentPage = [UIColor blackColor];
self.dotColorOtherPage = [UIColor lightGrayColor];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedRight:)];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
[self addGestureRecognizer:swipeRight];
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedLeft:)];
[swipe setDirection:UISwipeGestureRecognizerDirectionLeft];
[self addGestureRecognizer:swipe];
}
return self;
}
-(void) swipedLeft:(UISwipeGestureRecognizer *) recognizer
{
self.currentPage++;
}
-(void) swipedRight:(UISwipeGestureRecognizer *) recognizer
{
self.currentPage--;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(context, true);
CGRect currentBounds = self.bounds;
CGFloat dotsWidth = self.numberOfPages*kDotDiameter + MAX(0, self.numberOfPages-1)*kDotSpacer;
CGFloat x = CGRectGetMidX(currentBounds)-dotsWidth/2;
CGFloat y = CGRectGetMidY(currentBounds)-kDotDiameter/2;
for (int i=0; i<_numberOfPages; i++)
{
CGRect circleRect = CGRectMake(x, y, kDotDiameter, kDotDiameter);
if (i == _currentPage)
{
CGContextSetFillColorWithColor(context, self.dotColorCurrentPage.CGColor);
}
else
{
CGContextSetFillColorWithColor(context, self.dotColorOtherPage.CGColor);
}
CGContextFillEllipseInRect(context, circleRect);
x += kDotDiameter + kDotSpacer;
}
}
- (void)dealloc
{
[dotColorCurrentPage release];
[dotColorOtherPage release];
[delegate release];
[super dealloc];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (!self.delegate) return;
CGPoint touchPoint = [[[event touchesForView:self] anyObject] locationInView:self];
CGFloat dotSpanX = self.numberOfPages*(kDotDiameter + kDotSpacer);
CGFloat dotSpanY = kDotDiameter + kDotSpacer;
CGRect currentBounds = self.bounds;
CGFloat x = touchPoint.x + dotSpanX/2 - CGRectGetMidX(currentBounds);
CGFloat y = touchPoint.y + dotSpanY/2 - CGRectGetMidY(currentBounds);
if ((x<0) || (x>dotSpanX) || (y<0) || (y>dotSpanY)) return;
self.currentPage = floor(x/(kDotDiameter+kDotSpacer));
if ([self.delegate respondsToSelector:@selector(pageControlPageDidChange:)])
{
[self.delegate pageControlPageDidChange:self];
}
}
@end
Di iOS 6 Anda dapat mengatur warna rona
UIPageControl
:Ada 2 properti baru:
pageIndicatorTintColor
currentPageIndicatorTintColor
Anda juga dapat menggunakan API penampilan untuk mengubah warna warna semua indikator halaman.
Jika Anda menargetkan iOS 5 pastikan tidak macet:
sumber
bekerja untuk iOS6
sumber
Jika ada yang menginginkan versi ARC / modern (tidak perlu mendefinisikan ulang properti sebagai ivar, tidak ada dealloc, dan bekerja dengan Interface Builder):
PageControl.m:
sumber
Jawaban yang diberikan oleh Heiberg bekerja sangat baik, namun kontrol halaman tidak berperilaku persis seperti yang dilakukan oleh apel.
Jika Anda ingin kontrol halaman berperilaku seperti yang dilakukan oleh apple (selalu naikkan halaman saat ini satu per satu jika Anda menyentuh bagian kedua, sebaliknya turun satu per satu), coba ini sentuhMulai-metode sebagai gantinya:
sumber
Tambahkan kode berikut ke DidFinishLauch di AppDelegate,
Semoga ini bisa membantu.
sumber
gunakan ini untuk coding
atau dari storyboard Anda dapat mengubah dari warna halaman saat ini
sumber
Di Swift, kode ini di dalam UIPageViewController mendapatkan referensi ke indikator halaman dan mengatur propertinya
sumber
UIPageControl
tidak sama denganUIPageViewController
Menambahkan ke jawaban yang ada, itu bisa dilakukan seperti,
sumber
Mudah dengan Swift 1.2:
sumber
UIPageControl.appearanceWhenContainedInInstancesOfClasses([MyClassName.self])
alih-alihUIPageControl.appearance()
. Membutuhkan iOS 9.Anda dapat memperbaikinya dengan mudah dengan menambahkan kode berikut ke file appdelegate.m Anda di
didFinishLaunchingWithOptions
metode Anda :sumber
Ini berfungsi untuk saya di iOS 7.
sumber
Tidak mungkin menggunakan iPhone SDK dari sudut pandang resmi. Anda mungkin dapat melakukannya dengan menggunakan metode pribadi, tetapi itu akan menjadi penghalang untuk masuk ke app store.
Satu-satunya solusi aman lainnya adalah membuat kontrol halaman Anda sendiri yang seharusnya terlalu sulit mengingat kontrol halaman hanya menampilkan halaman apa yang saat ini ditampilkan dalam tampilan gulir.
sumber
@Jasarien Saya pikir Anda dapat mensubclass UIPageControll, baris yang dipilih hanya dari apple doc "Subclass yang menyesuaikan tampilan kontrol halaman dapat menggunakan metode ini untuk mengubah ukuran kontrol halaman ketika jumlah halaman berubah" untuk metode sizeForNumberOfPages:
sumber
Anda juga bisa menggunakan Pustaka Three20 yang berisi PageControl yang bergaya dan lusinan Kontrol dan Abstraksi UI lainnya yang bermanfaat.
sumber
Dalam cased
Swift 2.0
dan up, kode di bawah ini akan berfungsi:sumber
sumber