是线性还是对数?我问,因为我正在进行移动应用程序定向研究,我们正在使用Sam的自学iPhone(第2版,也是,booooooo!)。在第8小时,如果有人拥有它,我们制作动画,并使用滑块确定动画循环所需的时间。然后我们应该为每秒多少个循环做一个手动输入选项。我已经实现了这两个并将滑块更改为手动输入的内容,但我唯一能看到的问题是,当我手动输入一个值时,它将循环通过正确的循环量并将滑块移动到正确的定位,但每当我用滑块设置动画的速度时,它似乎以对数方式而不是线性地评估值。我的滑块范围为.05 - 19.95,所以它从.05开始并且没有超过值'1'直到4/5通过,然后是1-20其余的方式,你几乎没有准确的数字,你得到的数字。
感谢您的时间,如果您需要我改写一些让我知道的事情!
好的,我们走了。
ImageHopViewController.h:
#import <UIKit/UIKit.h>
@interface ImageHopViewController : UIViewController {
IBOutlet UIImageView *images;
IBOutlet UILabel *hps;
IBOutlet UISlider *slider;
IBOutlet UIButton *toggle;
IBOutlet UITextField *manual;
IBOutlet UIButton *go;
}
@property(retain, nonatomic) UIImageView *images;
@property(retain, nonatomic) UILabel *hps;
@property(retain, nonatomic) UISlider *slider;
@property(retain, nonatomic) UIButton *toggle;
@property(retain, nonatomic) UITextField *manual;
@property(retain, nonatomic) UIButton *go;
-(IBAction)toggleAnimation:(id)sender;
-(IBAction)setSpeed:(id)sender;
-(IBAction)manualEntry:(id)sender;
@end
ImageHopViewController.m:
#import "ImageHopViewController.h"
#import "ImageHopViewController.h"
@implementation ImageHopViewController
@synthesize images;
@synthesize hps;
@synthesize slider;
@synthesize toggle;
@synthesize manual;
@synthesize go;
-(IBAction)toggleAnimation:(id)sender{
if(images.isAnimating) {
[images stopAnimating];
[toggle setTitle:@"Begin!" forState:UIControlStateNormal];
}else{
[images startAnimating];
[toggle setTitle:@"Desist!" forState:UIControlStateNormal];
}
}
-(IBAction)setSpeed:(id)sender {
NSString *hopRate;
images.animationDuration=20-slider.value;
[images startAnimating];
[toggle setTitle:@"Desist!" forState:UIControlStateNormal];
hopRate=[[NSString alloc] initWithFormat:@"%1.2f", 1/(20-slider.value)];
hps.text=hopRate;
[hopRate release];
}
-(IBAction)manualEntry:(id)sender{
NSString *hopRate;
NSString *manualValue;
float value;
manualValue=manual.text;
value=[manualValue floatValue];
slider.value=value;
images.animationDuration=1/slider.value;
[images startAnimating];
[toggle setTitle:@"Desist!" forState:UIControlStateNormal];
hopRate=[[NSString alloc] initWithFormat:@"%1.2f", 1/(20-slider.value)];
hps.text=manualValue;
[hopRate release];
}
- (void)dealloc
{
[images dealloc];
[hps dealloc];
[slider dealloc];
[toggle dealloc];
[manual dealloc];
[go dealloc];
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
NSArray *animation;
animation=[[NSArray alloc] initWithObjects:
[UIImage imageNamed:@"frame-1.png"],
[UIImage imageNamed:@"frame-2.png"],
[UIImage imageNamed:@"frame-3.png"],
[UIImage imageNamed:@"frame-4.png"],
[UIImage imageNamed:@"frame-5.png"],
[UIImage imageNamed:@"frame-6.png"],
[UIImage imageNamed:@"frame-7.png"],
[UIImage imageNamed:@"frame-8.png"],
[UIImage imageNamed:@"frame-9.png"],
[UIImage imageNamed:@"frame-10.png"],
[UIImage imageNamed:@"frame-11.png"],
[UIImage imageNamed:@"frame-12.png"],
[UIImage imageNamed:@"frame-13.png"],
[UIImage imageNamed:@"frame-14.png"],
[UIImage imageNamed:@"frame-15.png"],
[UIImage imageNamed:@"frame-16.png"],
[UIImage imageNamed:@"frame-17.png"],
[UIImage imageNamed:@"frame-18.png"],
[UIImage imageNamed:@"frame-19.png"],
[UIImage imageNamed:@"frame-20.png"],
nil
];
images.animationImages=animation;
images.animationDuration=10;
[animation release];
[super viewDidLoad];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
@end
NIB
文件只有UIImageView
(图片),动态速度为UISlider
(滑块),UILabel
(hps)用于显示“hops”每秒“,一个UIButton
(切换)切换动画,一个UITextField
(手动)进行手动输入,另一个UIButton
(去)开始动画,输入的文本转换为float
。
因为我有(id)正在接收的对象类型,所以它会影响它吗?我还是新手,所以我该如何解决这个问题?
答案 0 :(得分:1)
UISlider
在minimumValue
(左)和maximumValue
(右)之间是线性的。
您可能需要检查continuous
属性,看看这不是罪魁祸首:
连续
包含一个布尔值,指示滑块中是否有更改 值生成连续更新事件。
@property(nonatomic, getter=isContinuous) BOOL continuous
讨论
如果
YES
,滑块会连续向相关联的人发送更新事件 目标的行动方法。如果NO
,则滑块仅发送操作事件 当用户释放滑块的拇指控件以设置最终时 值。此属性的默认值为
YES
。
答案 1 :(得分:1)
UISlider绝对是线性的。
一个快速的NSLog in action方法应该显示这个(NSLog(@"Slider value %f", sender.value);
)。
随便,我会说你的问题可能是类型转换(无意中将你的浮点转换为int某处)。我必须看到代码来确认或否认这一点。
答案 2 :(得分:1)
好的,animationDuration
里面的setSpeed
需要更改为images.animationDuration=1/slider.value;
,而float
中hopRate
插入setSpeed
需要已更改为slider.value
而不是1/(20-slider.value)];
。