4

我一直在寻找 5 星评级控件,但尚未找到可靠的解决方案。这个问题:

有人知道 iPhone 上是否有 5 星评级组件吗?

提供了几个不再可用的项目的链接,我无法找到它们。

编辑:我显然不擅长追踪项目,但我认为我的部分问题仍然存在。这是更新的链接http://code.google.com/p/s7ratingview/downloads/detail?name=s7ratingview-basic-release.zip

所以这个问题是两部分 - 那里有可靠的预制解决方案,你能指导我吗?

开发自己的解决方案是否更好/相当容易(是的,我意识到这两个方面存在冲突)?你能给我一些提示/资源吗?我理解子类化 UIView 和跟踪触摸事件以在另一个图像上扩展图像以看起来像星星的基本思想,但更多的方向会有所帮助。我已经在 iphone 上开发了不到一周的时间,仍然需要一些手把手。

4

4 回答 4

9

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

您可以查看我的博客以获取有关如何在您的项目中使用 DYRateView 的更多详细信息:http: //iappexperience.com/post/23227218867/dyrateview-a-simple-yet-powerful-rating-control-for

图片

图片

于 2012-05-17T20:45:49.597 回答
8

试试Ray Wenderlich 的5 星自定义 UIView。


[编辑]

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

于 2011-01-10T20:33:25.943 回答
1

您可以尝试的另一种方法DLStarRating让您自定义星星下方的区域,检测触摸。

在此处输入图像描述

于 2013-11-28T07:53:23.137 回答
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;
    }
}
于 2017-01-25T12:30:08.087 回答