উত্তর:
হালনাগাদ:
এই উত্তরটি 6 বছরের পুরানো এবং খুব পুরানো, তবে এটি এখনও ভোট এবং মন্তব্যগুলিকে আকর্ষণ করে। আইওএস .0.০ এর পর থেকে আপনার সম্পত্তি pageIndicatorTintColorএবং currentPageIndicatorTintColorবৈশিষ্ট্যগুলি ব্যবহার করা উচিত UIPageControl।
মূল উত্তর:
আমি আজ এই সমস্যায় পড়েছি এবং আমার নিজস্ব প্রতিস্থাপনের ক্লাসটি লেখার সিদ্ধান্ত নিয়েছি।
এটি একটি সাবলেসড ইউআইভিউ যা আপনার নির্দিষ্ট রঙগুলিতে বিন্দুগুলি রেন্ডার জন্য কোর গ্রাফিক্স ব্যবহার করে।
আপনি প্রকাশিত বৈশিষ্ট্যগুলি এটি কাস্টমাইজ এবং নিয়ন্ত্রণ করতে ব্যবহার করেন।
আপনি যদি চান, ব্যবহারকারী যখন ছোট পৃষ্ঠার বিন্দুগুলির একটিতে ট্যাপ করেন তবে বিজ্ঞপ্তিগুলি পেতে একটি প্রতিনিধি অবজেক্টটি নিবন্ধভুক্ত করতে পারেন। যদি কোনও প্রতিনিধি নিবন্ধিত না হয় তবে ভিউ টাচ ইনপুটটিতে প্রতিক্রিয়া জানাবে না।
এটি চুলা থেকে সম্পূর্ণ তাজা, তবে কাজ করে বলে মনে হচ্ছে। আপনি যদি এটির সাথে কোনও সমস্যায় পড়ে থাকেন তবে আমাকে জানান।
ভবিষ্যতের উন্নতি:
উদাহরণ ব্যবহার:
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];
শিরোনাম ফাইল:
//
// PageControl.h
//
// Replacement for UIPageControl because that one only supports white dots.
//
// Created by Morten Heiberg <morten@heiberg.net> 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
বাস্তবায়ন ফাইল:
//
// PageControl.m
//
// Replacement for UIPageControl because that one only supports white dots.
//
// Created by Morten Heiberg <morten@heiberg.net> 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
আইওএস 6 এ আপনি এর রঙিন রঙটি সেট করতে পারেন UIPageControl:
2 টি নতুন বৈশিষ্ট্য রয়েছে:
pageIndicatorTintColorcurrentPageIndicatorTintColorআপনি সমস্ত পৃষ্ঠার সূচকের রঙিন রঙ পরিবর্তন করতে উপস্থিতি API ব্যবহার করতে পারেন।
আপনি যদি আইওএস 5 কে টার্গেট করে থাকেন তবে নিশ্চিত হয়ে নিন যে এটি ক্রাশ হয় না:
if ([pageControl respondsToSelector:@selector(setPageIndicatorTintColor:)]) {
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
}
pageControl.pageIndicatorTintColor = [UIColor redColor];
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
iOS6 এর জন্য কাজ করে
যদি কেউ এটির একটি আরসি / আধুনিক সংস্করণ চায় (আইভার হিসাবে কোনও বৈশিষ্ট্য পুনরায় সংজ্ঞায়িত করার দরকার নেই, কোনও ডালোক নেই এবং ইন্টারফেস বিল্ডারের সাথে কাজ করে):
#import <UIKit/UIKit.h>
@protocol PageControlDelegate;
@interface PageControl : UIView
// Set these to control the PageControl.
@property (nonatomic) NSInteger currentPage;
@property (nonatomic) NSInteger numberOfPages;
// Customize these as well as the backgroundColor property.
@property (nonatomic, strong) UIColor *dotColorCurrentPage;
@property (nonatomic, strong) UIColor *dotColorOtherPage;
// Optional delegate for callbacks when user taps a page dot.
@property (nonatomic, weak) NSObject<PageControlDelegate> *delegate;
@end
@protocol PageControlDelegate<NSObject>
@optional
- (void)pageControlPageDidChange:(PageControl *)pageControl;
@end
পেজকন্ট্রোল.এম:
#import "PageControl.h"
// Tweak these or make them dynamic.
#define kDotDiameter 7.0
#define kDotSpacer 7.0
@implementation PageControl
@synthesize dotColorCurrentPage;
@synthesize dotColorOtherPage;
@synthesize currentPage;
@synthesize numberOfPages;
@synthesize delegate;
- (void)setCurrentPage:(NSInteger)page
{
currentPage = MIN(MAX(0, page), self.numberOfPages-1);
[self setNeedsDisplay];
}
- (void)setNumberOfPages:(NSInteger)pages
{
numberOfPages = MAX(0, pages);
currentPage = MIN(MAX(0, self.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];
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder])
{
self.dotColorCurrentPage = [UIColor blackColor];
self.dotColorOtherPage = [UIColor lightGrayColor];
}
return self;
}
- (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<self.numberOfPages; i++)
{
CGRect circleRect = CGRectMake(x, y, kDotDiameter, kDotDiameter);
if (i == self.currentPage)
{
CGContextSetFillColorWithColor(context, self.dotColorCurrentPage.CGColor);
}
else
{
CGContextSetFillColorWithColor(context, self.dotColorOtherPage.CGColor);
}
CGContextFillEllipseInRect(context, circleRect);
x += kDotDiameter + kDotSpacer;
}
}
- (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
হেইবার্গের দেওয়া উত্তরটি সত্যিই ভাল কাজ করে, তবে পৃষ্ঠা নিয়ন্ত্রণটি আপেলের মতো ঠিক তেমন আচরণ করে না।
আপনি যদি পৃষ্ঠার নিয়ন্ত্রণটি আপেলের মতো আচরণ করতে চান তবে (দ্বিতীয়ার্ধটি স্পর্শ করলে সর্বদা বর্তমান পৃষ্ঠাটিকে একের পর এক বাড়িয়ে দিন, অন্যথায় এক হ্রাস করুন), পরিবর্তে এই টাচবিগান-পদ্ধতি ব্যবহার করে দেখুন:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[[event touchesForView:self] anyObject] locationInView:self];
CGRect currentBounds = self.bounds;
CGFloat x = touchPoint.x - CGRectGetMidX(currentBounds);
if(x<0 && self.currentPage>=0){
self.currentPage--;
[self.delegate pageControlPageDidChange:self];
}
else if(x>0 && self.currentPage<self.numberOfPages-1){
self.currentPage++;
[self.delegate pageControlPageDidChange:self];
}
}
অ্যাপডেলিগেটে ডিডফিনিশ লাউচে নিম্নলিখিত কোডটি যুক্ত করুন,
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
আশা করি এটি সাহায্য করবে।
কোডিংয়ের জন্য এটি ব্যবহার করুন
if ([pageControl respondsToSelector:@selector(setPageIndicatorTintColor:)]) {
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
}
অথবা স্টোরিবোর্ড থেকে আপনি বর্তমান পৃষ্ঠার রঙ থেকে পরিবর্তন করতে পারেন
সুইফটে, ইউআইপেজভিউ কনট্রোলারের ভিতরে এই কোডটি পৃষ্ঠা সূচকটির একটি রেফারেন্স পেয়েছে এবং এর বৈশিষ্ট্যগুলি সেট করছে setting
override func viewDidLoad() {
super.viewDidLoad()
//Creating the proxy
let pageControl = UIPageControl.appearance()
//Customizing
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.currentPageIndicatorTintColor = UIColor.darkGrayColor()
//Setting the background of the view controller so the dots wont be on a black background
self.view.backgroundColor = UIColor.whiteColor()
}
UIPageControlUIPageViewController
বিদ্যমান উত্তরগুলিতে যুক্ত করা, এটি করা যেতে পারে যেমন,

এটি সুইফট 1.2 এর সাথে সহজ:
UIPageControl.appearance().pageIndicatorTintColor = UIColor.lightGrayColor()
UIPageControl.appearance().currentPageIndicatorTintColor = UIColor.redColor()
UIPageControl.appearanceWhenContainedInInstancesOfClasses([MyClassName.self])পরিবর্তে ব্যবহার করুন UIPageControl.appearance()। আইওএসের প্রয়োজন 9.
আপনার পদ্ধতিতে আপনার appdelegate.m ফাইলে নিম্নলিখিত কোড যুক্ত করে আপনি সহজেই এটি ঠিক করতে পারেন didFinishLaunchingWithOptions:
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor darkGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor orangeColor];
pageControl.backgroundColor = [UIColor whiteColor]
অফিসিয়াল দৃষ্টিকোণ থেকে আইফোন এসডিকে ব্যবহার করা সম্ভব নয়। আপনি ব্যক্তিগত পদ্ধতিগুলি ব্যবহার করে এটি করতে সক্ষম হতে পারেন তবে এটি অ্যাপ স্টোরে উঠতে বাধা হয়ে দাঁড়াবে।
কেবলমাত্র অন্য একটি নিরাপদ সমাধান হল নিজের পৃষ্ঠা নিয়ন্ত্রণ তৈরি করা যা shpuldnt খুব কঠিন হতে পারে যে পৃষ্ঠার নিয়ন্ত্রণটি কেবল বর্তমানে কোন পৃষ্ঠাটি একটি স্ক্রোল দৃশ্যে প্রদর্শিত হচ্ছে তা প্রদর্শন করে।
এর cased সালে Swift 2.0এবং তার উচ্চ, কোড নিচে কাজ করবে:
pageControl.pageIndicatorTintColor = UIColor.whiteColor()
pageControl.currentPageIndicatorTintColor = UIColor.redColor()
myView.superview.tintColor = [UIColor colorWithRed:1.0f
green:1.0f blue:1.0f alpha:1.0f];