テキストフィールド(またはそれに似ているもの)を数値で作るにはどうしたらいいですか?タッチしたり指をスワイプして増減できます増加)または減少(減少)。iPhone - スワイプに応答する浮動小数点数のテキストフィールドを作成する
どのように動作するのですか:0.0のtexfieldがあります。あなたはそれに触れ、指を下に動かします。次に、指をさらに動かすと値が減少するのがわかります。指の動きを止めると、値は変わりません。
これはObjective-Cでどうすればできますか?
テキストフィールド(またはそれに似ているもの)を数値で作るにはどうしたらいいですか?タッチしたり指をスワイプして増減できます増加)または減少(減少)。iPhone - スワイプに応答する浮動小数点数のテキストフィールドを作成する
どのように動作するのですか:0.0のtexfieldがあります。あなたはそれに触れ、指を下に動かします。次に、指をさらに動かすと値が減少するのがわかります。指の動きを止めると、値は変わりません。
これはObjective-Cでどうすればできますか?
この回答はかなり大きいので、私はgithubにサンプルコードを入れることにしました。
複数のラベルに対応するには、まずUILabel
のサブクラスを作成し、dragging
というプロパティを追加します。私たちはクラスDragLabel
を呼ぶのが大好きです。
DragLabel.h
#import <Foundation/Foundation.h>
@interface DragLabel : UILabel {
BOOL dragging;
}
@property (assign) BOOL dragging;
@end
DragLabel.m
#import "DragLabel.h"
@implementation DragLabel
@synthesize dragging;
@end
Interface Builderの
今あなたが必要IBのビューに3つのラベルをドラッグし、すべてのクラスをDragLabel
に変更します。アウトレットを作成する前に、の前にを作成してください。
ここでラベルクラスとインターフェイスが設定され、ビューコントローラのコードを記述する時間があります。
Controller.hは次のようになります。私は次のようになります。
あなたController.m DragViewController.h
それ と呼ばれます。私はそれをDragViewControllerと呼んだ。メートル#import "DragViewController.h"
@implementation DragViewController
@synthesize label1;
@synthesize label2;
@synthesize label3;
- (void)dealloc
{
[label1 release];
[label2 release];
[label3 release];
[draglabels release];
[super dealloc];
}
- (void)viewDidLoad
{
draglabels = [[NSArray alloc] initWithObjects:label1, label2, label3, nil];
for (DragLabel *label in draglabels) {
label.dragging = NO;
}
[super viewDidLoad];
}
- (void)movedLabel:(DragLabel *)label touchloc:(CGPoint)touchloc {
float val = (label.center.y - touchloc.y)/10;
label.text = [NSString stringWithFormat:@"%g",val];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint touchloc = [[touches anyObject] locationInView:self.view];
for (DragLabel *label in draglabels) {
if (CGRectContainsPoint(label.frame, touchloc)) {
label.dragging = YES;
[self movedLabel:label touchloc:touchloc];
}
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
for (DragLabel *label in draglabels) {
if (label.dragging) {
CGPoint touchloc = [[touches anyObject] locationInView:self.view];
[self movedLabel:label touchloc:touchloc];
}
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
for (DragLabel *label in draglabels) {
label.dragging = NO;
}
}
- (void)viewDidUnload
{
[self setLabel1:nil];
[self setLabel2:nil];
[self setLabel3:nil];
[super viewDidUnload];
}
@end
一つ、それはこのような再実装movedLabel
、ユーザーがラベルの上にドラッグした場合にのみ、0から1の範囲にあるように、規模を調整する最後のもの
:
- (void)movedLabel:(DragLabel *)label touchloc:(CGPoint)touchloc {
float ydif = label.center.y-touchloc.y;
float maxheight = 100;
if (ydif > 0) {
if (ydif <= maxheight) label.text = [NSString stringWithFormat:@"%g",ydif/maxheight];
else label.text = [NSString stringWithFormat:@"%g",maxheight];
}
else label.text = @"0.0";
}
/透明隠されている 'UISlider'は、トリック – jrturton
を行う必要があります。しかし、それはwithiからのみ触れることができるだろうnテキストフィールド(またはビュー?)は、それも可能ですか?私はそれがインターフェイスの残りの部分と干渉しないようにしたいので、 – laarsk