2011-01-10 28 views
4

我一直在寻找5星级的评级控制一段时间了,并没有找到一个坚实的解决方案。 这个问题:评分明星的iphone

Anyone know whether there is a 5-star rating component on iPhone?

提供了几个环节,其不再可用,我一直无法跟踪下来的项目。

编辑:我在跟踪项目显然不好,但我觉得我的问题的一部分,仍然有效。这里是更新的链接http://code.google.com/p/s7ratingview/downloads/detail?name=s7ratingview-basic-release.zip

所以这个问题是2部分 - 是否有一个固定的预制解决方案,你可以指导我吗?

是更好/很容易(是的,我知道这两个方面是相冲突的)增长自己的解决方案?你能否给我一些提示/资源来做到这一点。我理解继承UIView和追踪触摸事件以将另一图像的顶部图像展开为看起来像星星的基本概念,但稍微多一些方向将会有所帮助。我一直在iPhone上开发了一段时间,仍然需要一些手持。

+0

这仍然是可用的:http://code.google.com/p/s7ratingview/downloads/detail?name=s7ratingview-basic-release.zip – 2011-01-10 18:40:55

+0

尔加!该链接显示,作为一个旧的项目页面,它指向在github上的链接是404>。<感谢您的新链接! – 2011-01-10 18:43:34

回答

7

尝试用一个5星评级Ray Wenderlich's自定义的UIView。


[编辑]

您也可以尝试使用UISlider并提供最小/最大跟踪图像。

9

你可以给DYRateView一试。我想尽可能多地重复使用Ray教程中的那个,但是它缺少了几个功能,所以我自己做了一个。

你可以看看我的博客,了解有关如何在项目中使用DYRateView进一步的细节:http://iappexperience.com/post/23227218867/dyrateview-a-simple-yet-powerful-rating-control-for

picture http://f.cl.ly/items/2D2R152W1z3T0O033f0G/DYRateView---readonly.png

picture http://f.cl.ly/items/1d291U2w423y3t2L0B02/DYRateView---editable.png

1

,你可以尝试DLStarRating另一种方式可以让你定制的星星下面的区域,检测触摸。

enter image description here

0

就容易给人一种星遵循本准则和复制并粘贴到您的项目,只需运行。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    startview = [[UIView alloc] initWithFrame:CGRectMake(45, 70, 230, 50)]; 
    startview.backgroundColor = [UIColor redColor]; 
    NSInteger getrating = 0; 
    int x = 5; 
    for (int k = 1; k <= 5; k++) 
    { 
     UIImageView * mystarimage = [[UIImageView alloc] initWithFrame:CGRectMake(x, 5, 40, 40)]; 

     if (getrating >= k) 
     { 
      mystarimage.image = [UIImage imageNamed:@"star.png"]; 
     } 
     else 
     { 
      mystarimage.image = [UIImage imageNamed:@"gray-star.png"]; 
     } 

     mystarimage.tag = k; 
     mystarimage.userInteractionEnabled = YES; 
     [startview addSubview:mystarimage]; 
     UITapGestureRecognizer *letterTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(updateStar:)]; 
     rateMember = mystarimage.tag; 
     NSLog(@"rateing %ld",(long)rateMember); 
     letterTapRecognizer.numberOfTapsRequired = 1; 
     [mystarimage addGestureRecognizer:letterTapRecognizer]; 
     x = x + 45; 
    } 
    [self.view addSubview:startview]; 
} 

-(void)updateStar :(UITapGestureRecognizer*)sender 
{ 
    UIView *view = sender.view; 
    NSLog(@"hello ji %ld", (long)view.tag); 
    NSInteger getrating; 

    switch (view.tag) 
    { 
     case 1: 
      NSLog(@"press 1"); 
      rateMember = 1; 
      break; 
     case 2: 
      NSLog(@"press 2"); 
      rateMember = 2; 
      break; 
     case 3: 
      NSLog(@"press 3"); 
      rateMember = 3; 
      break; 
     case 4: 
      NSLog(@"press 4"); 
      rateMember = 4; 
      break; 
     case 5: 
      NSLog(@"press 4"); 
      rateMember = 5; 
      break; 
     default: 
      NSLog(@"press 5"); 
      rateMember = 5; 
      break; 
    } 

    getrating = rateMember; 
    NSLog(@"Get rating -------> %ld",(long)getrating); 
    int x = 5; 
    for (int k = 1; k <= 5 ; k++) 
    { 
     UIImageView * mystarimage = [[UIImageView alloc] initWithFrame:CGRectMake(x, 5, 40, 40)]; 

     if (getrating >= k) 
     { 
      mystarimage.image = [UIImage imageNamed:@"star.png"]; 
     } 
     else 
     { 
      mystarimage.image = [UIImage imageNamed:@"gray-star.png"]; 
     } 
     mystarimage.tag = k; 
     mystarimage.userInteractionEnabled = YES; 
     [startview addSubview:mystarimage]; 
     UITapGestureRecognizer *letterTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(updateStar:)]; 
     letterTapRecognizer.numberOfTapsRequired = 1; 
     [mystarimage addGestureRecognizer:letterTapRecognizer]; 
     x = x + 45; 
    } 
}