Saturday, 16 March 2013

IOS Rating Bars


Rating Bars

RatingBar.h
//
// RatingBar.h
// SampleRatingBar
//
// Created by Prince Kumar Sharma on 08/03/13.
// Copyright (c) 2013 Prince Kumar Sharma All rights reserved.
//
#import <UIKit/UIKit.h>
typedef enum
{
rb0,
rb1_h,
rb1,
rb2_h,
rb2,
rb3_h,
rb3,
rb4_h,
rb4,
rb5_h,
rb5
}RBRatings;
@interface RatingBar : UIView
{
@private
CGSize imageSize;
RBRatings ratingPoint;
}
-(id)initWithSize:(CGSize)size AndPosition:(CGPoint)position;
-(RBRatings)getcurrentRatings;
-(void)setRatings:(RBRatings)rate;
@end
view raw RatingBar.h hosted with ❤ by GitHub

RatingBar.m
//
// RatingBar.m
// SampleRatingBar
//
// Created by Prince Kumar Sharma on 08/03/13.
// Copyright (c) 2013 Prince Kumar Sharma All rights reserved.
//
#import "RatingBar.h"
@implementation RatingBar
-(id)initWithSize:(CGSize)size AndPosition:(CGPoint)position
{
CGRect rect=CGRectMake(position.x, position.y, size.width, size.height);
if (self==[super initWithFrame:rect]) {
NSLog(@"self frame is %f,%f,%f,%f",position.x,position.y,size.width,size.height);
NSLog(@"self frame is %f,%f,%f,%f",self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
imageSize=CGSizeMake(size.width/5,size.height);
ratingPoint=rb0;
int x=0;
for (int i=0;i<5;i++) {
[self addSubview:[self imageViewWithFrame:CGRectMake(x, 0, imageSize.width, imageSize.height) andTag:i+1]];
x+=imageSize.width;
}
}
return self;
}
-(void)fillStartillPoint:(CGPoint)point
{
if (point.x<imageSize.width/2 && point.x>0) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb1_h;
}
if (point.x<imageSize.width && point.x>=imageSize.width/2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb1;
}
if (point.x<imageSize.width*2-imageSize.width/2 && point.x>=imageSize.width) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb2_h;
}
if (point.x<imageSize.width*2 && point.x>=imageSize.width*2-imageSize.width/2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb2;
}
if (point.x<imageSize.width*3-imageSize.width/2 && point.x>=imageSize.width*2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb3_h;
}
if (point.x<imageSize.width*3 && point.x>=imageSize.width*3-imageSize.width/2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb3;
}
if (point.x<imageSize.width*4-imageSize.width/2 && point.x>=imageSize.width*3) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb4_h;
}
if (point.x<imageSize.width*4 && point.x>=imageSize.width*4-imageSize.width/2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
ratingPoint=rb4;
}
if (point.x<imageSize.width*5-imageSize.width/2 && point.x>=imageSize.width*4) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"hf.png"]];
ratingPoint=rb5_h;
}
if (point.x<imageSize.width*5 && point.x>=imageSize.width*5-imageSize.width/2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"ff.png"]];
ratingPoint=rb5;
}
}
-(void)setRatings:(RBRatings)rate
{
ratingPoint=rate;
if (rate==rb0)
{
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb1_h) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb1) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb2_h) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb2) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb3_h) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb3) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"nf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb4_h) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"hf.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb4) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"nf.png"]];
}
if (rate==rb5_h) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"hf.png"]];
}
if (rate==rb5) {
[[self imageViewAtIndex:1] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:2] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:3] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:4] setImage:[UIImage imageNamed:@"ff.png"]];
[[self imageViewAtIndex:5] setImage:[UIImage imageNamed:@"ff.png"]];
}
}
-(RBRatings)getcurrentRatings
{
return ratingPoint;
}
-(UIImageView*)imageViewAtIndex:(int)index
{
return (UIImageView*)[self viewWithTag:index];
}
-(UIImageView*)imageViewWithFrame:(CGRect)rect andTag:(int)itag
{
UIImageView *image=[[UIImageView alloc] initWithFrame:rect];
[image setImage:[UIImage imageNamed:@"nf.png"]];
[image setTag:itag];
return image;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch=[touches anyObject];
CGPoint pt=[touch locationInView:self];
if ((pt.x>=0 && pt.x<=self.frame.size.width) && (pt.y>0 && pt.y<=self.frame.size.height)) {
[self fillStartillPoint:pt];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch=[touches anyObject];
CGPoint pt=[touch locationInView:self];
if ((pt.x>=0 && pt.x<=self.frame.size.width) && (pt.y>0 && pt.y<=self.frame.size.height)) {
[self fillStartillPoint:pt];
}
}
@end
view raw RatingBar.m hosted with ❤ by GitHub



You have to download three images named :-

nf.png 
ff.png
hf.png

for these file to work.









Using:--

#import "RatingBar.h"
#import "SRViewController.h"
@interface SRViewController ()
@end
@implementation SRViewController
- (void)viewDidLoad
{
RatingBar *ratebar;
ratebar=[[RatingBar alloc] initWithSize:CGSizeMake(150, 30) AndPosition:CGPointMake(10, 10)];
[ratebar setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:ratebar];
RatingBar *ratebar2=[[RatingBar alloc] initWithSize:CGSizeMake(200, 50) AndPosition:CGPointMake(30, 100)];
[ratebar2 setBackgroundColor:[UIColor redColor]];
[self.view addSubview:ratebar2];
RatingBar *ratebar3=[[RatingBar alloc] initWithSize:CGSizeMake(100, 20) AndPosition:CGPointMake(25, 70)];
[ratebar3 setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:ratebar3];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
view raw gistfile1.m hosted with ❤ by GitHub

You can have Sample Project

5 comments:

  1. Hi... Prince
    It's nice code.. In my app i dont get any value from getcurrentRatings methode call. All time it return 0

    ReplyDelete
  2. wait I am re uploading sample check after uploaded.

    ReplyDelete
  3. Now you can download sample and check.

    ReplyDelete
  4. Hi.. can i set the rate from right to left instead of left to right?

    ReplyDelete