此為前一篇的改良版,加入了tap的功能
A. 右上點擊會到第一頁,同向上滑動
B. 左上點擊會到第五頁,同向下滑動
C. 右下點擊會到下一頁,同向右滑動
D. 左下點擊會到前一頁,同向左滑動
只有改動mySwipeViewController.m的程式碼
@interface mySwipeViewController ()
@end
@implementation mySwipeViewController
@synthesize bookImage;
@synthesize pageLabel;
@synthesize actionLabel;
@synthesize pages;
int currentTag = 1;
int lastTag = 1;
- (void) screenWasSwipe: (UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionDown) {
actionLabel.text = @"動作:向下滑動";
currentTag =5;
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp) {
actionLabel.text = @"動作:向上滑動";
currentTag =1;
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
actionLabel.text = @"動作:向右滑動";
currentTag ++;
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
actionLabel.text = @"動作:向左滑動";
currentTag --;
}
else {
actionLabel.text = @"Not thing";
}
if (currentTag >=6)
currentTag = 1;
if (currentTag ==0)
currentTag = 5;
NSString *currentName = [pages objectAtIndex:currentTag-1];
[bookImage setImage:[UIImage imageNamed:currentName]];
[bookImage setUserInteractionEnabled:YES];
bookImage.tag = currentTag;
if (lastTag != currentTag)
[self flipAnimation:currentTag action:recognizer];
lastTag = currentTag;
pageLabel.text = [NSString stringWithFormat:@"頁碼:%d", currentTag ];
}
- (void) screenWasTap:(NSInteger *) tapLocation
{
if (tapLocation == 1) {
actionLabel.text = @"動作:向上滑動";
currentTag =1;
}
else if (tapLocation == 2) {
actionLabel.text = @"動作:向下滑動";
currentTag =5;
}
else if (tapLocation == 3) {
actionLabel.text = @"動作:向左滑動";
currentTag --;
}
else if (tapLocation == 4) {
actionLabel.text = @"動作:向右滑動";
currentTag ++;
}
else {
actionLabel.text = @"Not thing";
}
if (currentTag >=6)
currentTag = 1;
if (currentTag ==0)
currentTag = 5;
NSString *currentName = [pages objectAtIndex:currentTag-1];
[bookImage setImage:[UIImage imageNamed:currentName]];
[bookImage setUserInteractionEnabled:YES];
bookImage.tag = currentTag;
if (lastTag != currentTag)
[self flipAnimationForTap:currentTag tapAction:tapLocation];
lastTag = currentTag;
pageLabel.text = [NSString stringWithFormat:@"頁碼:%d", currentTag ];
}
- (void) flipAnimation:(NSInteger *)currentTag action:(UISwipeGestureRecognizer *)recognizer
{
//翻頁動畫效果
UIView *currentView=[self.view viewWithTag:currentTag];
[UIView beginAnimations:@"animationID" context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:NO];
if (recognizer.direction == UISwipeGestureRecognizerDirectionDown)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
else if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
// else
// actionLabel.text = @"Not thing";
[currentView removeFromSuperview];
[self.view addSubview:bookImage];
[UIView commitAnimations];
}
- (void) flipAnimationForTap:(NSInteger *)currentTag tapAction:(NSInteger *)action
{
//翻頁動畫效果
UIView *currentView=[self.view viewWithTag:currentTag];
[UIView beginAnimations:@"animationID" context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:NO];
if (action == 1)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
else if (action == 2)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
else if (action == 3)
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
else if (action == 4)
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
// else
// actionLabel.text = @"Not thing";
[currentView removeFromSuperview];
[self.view addSubview:bookImage];
[UIView commitAnimations];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// swipe up
UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeUp.numberOfTouchesRequired = 1;
swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUp];
// swipe down
UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeDown.numberOfTouchesRequired = 1;
swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDown];
// swipe Right
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeRight.numberOfTouchesRequired = 1;
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRight];
// swipe Left
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeLeft.numberOfTouchesRequired = 1;
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
pages=[[NSArray alloc] initWithObjects:@"Green Apple.gif",@"Orange.gif",@"Pear.gif",@"Red Apple.gif",@"Strawberry.gif",
nil];
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSInteger tapLocation =0;
//int count = [[touches allObjects] count];
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
//startPointLabel.text = [NSString stringWithFormat:@"P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
// movePointLabel.text = [NSString stringWithFormat:@"P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
//countLabel.text = [NSString stringWithFormat:@"count = %d", count];
if (p1.x > 200 && p1.y >300)
[self screenWasTap:4];
else if (p1.x <100 && p1.y >300)
[self screenWasTap:3];
else if (p1.x >200 && p1.y <100)
[self screenWasTap:1];
else if (p1.x <100 && p1.y <100)
[self screenWasTap:2];
}
2012年9月7日 星期五
IOS手指辨識基本實作(五)
使用UISwipeGestureRecognizer實作出電子書的翻頁
1. 先開一個專案
2.放置兩個Label及一個UIImageView在Storyboard上
3. 將Mac上的Icon圖片加入到檔案中
4.將草莓圖案放入UIImageView上
5.將兩個Label及 UIImageView註冊到mySwipeViewController.h上
6.並在mySwipeViewController.h上增加一個pages的變數,形態設為strong。
7. 在mySwipeViewController.m上面增加一些控制程式碼
#import "mySwipeViewController.h"
@interface mySwipeViewController ()
@end
@implementation mySwipeViewController
@synthesize bookImage;
@synthesize pageLabel;
@synthesize actionLabel;
@synthesize pages;
int currentTag = 1;
- (void) screenWasSwipe: (UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionDown)
actionLabel.text = @"動作:向下滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp)
actionLabel.text = @"動作:向上滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
actionLabel.text = @"動作:向右滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
actionLabel.text = @"動作:向左滑動";
else
actionLabel.text = @"Not thing";
NSString *currentName = [pages objectAtIndex:currentTag-1];
[bookImage setImage:[UIImage imageNamed:currentName]];
[bookImage setUserInteractionEnabled:YES];
currentTag ++;
if (currentTag >=6)
currentTag = 1;
bookImage.tag = currentTag;
//翻頁動畫效果
UIView *currentView=[self.view viewWithTag:currentTag];
[UIView beginAnimations:@"animationID" context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[currentView removeFromSuperview];
[self.view addSubview:bookImage];
[UIView commitAnimations];
pageLabel.text = [NSString stringWithFormat:@"頁碼:%d", currentTag ];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// swipe up
UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeUp.numberOfTouchesRequired = 1;
swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUp];
// swipe down
UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeDown.numberOfTouchesRequired = 1;
swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDown];
// swipe Right
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeRight.numberOfTouchesRequired = 1;
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRight];
// swipe Left
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeLeft.numberOfTouchesRequired = 1;
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
pages=[[NSArray alloc] initWithObjects:@"Green Apple.gif",@"Orange.gif",@"Pear.gif",@"Red Apple.gif",@"Strawberry.gif",
nil];
}
8. 完成後的執行結果如下,會有五種水果輪流出現,並顯示翻頁效果及翻頁動作,共有五頁循環出現。
1. 先開一個專案
2.放置兩個Label及一個UIImageView在Storyboard上
3. 將Mac上的Icon圖片加入到檔案中
4.將草莓圖案放入UIImageView上
5.將兩個Label及 UIImageView註冊到mySwipeViewController.h上
6.並在mySwipeViewController.h上增加一個pages的變數,形態設為strong。
7. 在mySwipeViewController.m上面增加一些控制程式碼
#import "mySwipeViewController.h"
@interface mySwipeViewController ()
@end
@implementation mySwipeViewController
@synthesize bookImage;
@synthesize pageLabel;
@synthesize actionLabel;
@synthesize pages;
int currentTag = 1;
- (void) screenWasSwipe: (UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionDown)
actionLabel.text = @"動作:向下滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp)
actionLabel.text = @"動作:向上滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
actionLabel.text = @"動作:向右滑動";
else if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
actionLabel.text = @"動作:向左滑動";
else
actionLabel.text = @"Not thing";
NSString *currentName = [pages objectAtIndex:currentTag-1];
[bookImage setImage:[UIImage imageNamed:currentName]];
[bookImage setUserInteractionEnabled:YES];
currentTag ++;
if (currentTag >=6)
currentTag = 1;
bookImage.tag = currentTag;
//翻頁動畫效果
UIView *currentView=[self.view viewWithTag:currentTag];
[UIView beginAnimations:@"animationID" context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[currentView removeFromSuperview];
[self.view addSubview:bookImage];
[UIView commitAnimations];
pageLabel.text = [NSString stringWithFormat:@"頁碼:%d", currentTag ];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// swipe up
UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeUp.numberOfTouchesRequired = 1;
swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUp];
// swipe down
UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeDown.numberOfTouchesRequired = 1;
swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDown];
// swipe Right
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeRight.numberOfTouchesRequired = 1;
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRight];
// swipe Left
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(screenWasSwipe:)];
swipeLeft.numberOfTouchesRequired = 1;
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
pages=[[NSArray alloc] initWithObjects:@"Green Apple.gif",@"Orange.gif",@"Pear.gif",@"Red Apple.gif",@"Strawberry.gif",
nil];
}
为了能让上页下页翻页的时候找到关联的页面,采用了如下机制:
- 将图片封装为UIImageView显示
- 可以为UIImageView设置一个tag值,值为数组下标+1
- 这样,上级view有方法能根据tag查询到UIImageView,比如:UIView *currentView=[self.view viewWithTag:currentTag];
- 设置一个成员变量currentTag保存当前的tag值
8. 完成後的執行結果如下,會有五種水果輪流出現,並顯示翻頁效果及翻頁動作,共有五頁循環出現。
2012年9月6日 星期四
IOS手指辨識基本實作(四)
雙指辨識基本使用
1. 沿用前一篇的例子來修改,將storyboard修改如下
2. 將新加入的Label註冊到myTouchViewController.h
@interface myTouchViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *startPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *startPoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *movePointLabel;
@property (weak, nonatomic) IBOutlet UILabel *movePoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *endPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *endPoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *countLabel;
@end
3. 將storyboard中的 UIView的multipleTouch打開。有兩種方法,分別是右上的MultipleTouch勾選,或是在viewDiwLoad中加入self.view.multipleTouchEnabled=YES。
4. 修改myTouchViewController.m
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
int count = [[touches allObjects] count];
CGPoint point = [[touches anyObject] locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起點 x= %3.2f, y= %3.2f", point.x, point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起始點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
startPoint2Label.text = [NSString stringWithFormat:@"起始點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
countLabel.text = [NSString stringWithFormat:@"count = %d", count];
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
CGPoint point = [[touches anyObject] locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"現在點 x= %3.2f, y= %3.2f", point.x, point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"移動點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
movePoint2Label.text = [NSString stringWithFormat:@"移動點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
CGPoint point = [[touches anyObject] locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"終點 x = %3.2f, y= %3.2f", point.x , point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"結束點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
endPoint2Label.text = [NSString stringWithFormat:@"結束點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
}
5. 執行結果如下
其中兩點觸控的操作可參考
1. 沿用前一篇的例子來修改,將storyboard修改如下
2. 將新加入的Label註冊到myTouchViewController.h
@interface myTouchViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *startPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *startPoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *movePointLabel;
@property (weak, nonatomic) IBOutlet UILabel *movePoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *endPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *endPoint2Label;
@property (weak, nonatomic) IBOutlet UILabel *countLabel;
@end
3. 將storyboard中的 UIView的multipleTouch打開。有兩種方法,分別是右上的MultipleTouch勾選,或是在viewDiwLoad中加入self.view.multipleTouchEnabled=YES。
4. 修改myTouchViewController.m
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
int count = [[touches allObjects] count];
CGPoint point = [[touches anyObject] locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起點 x= %3.2f, y= %3.2f", point.x, point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起始點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
startPoint2Label.text = [NSString stringWithFormat:@"起始點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
countLabel.text = [NSString stringWithFormat:@"count = %d", count];
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
CGPoint point = [[touches anyObject] locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"現在點 x= %3.2f, y= %3.2f", point.x, point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"移動點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
movePoint2Label.text = [NSString stringWithFormat:@"移動點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
CGPoint point = [[touches anyObject] locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"終點 x = %3.2f, y= %3.2f", point.x , point.y];
*/
//計算同一時間有多少觸碰點
int count = [[touches allObjects] count];
//從陣列中取得第一個觸碰點(編號0)
CGPoint p1 = [[[touches allObjects] objectAtIndex:0]locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"結束點 P1.x = %3.2f, P1.y= %3.2f", p1.x, p1.y];
if (count ==2 ) {
//從陣列中取得第二個觸碰點(編號1)
CGPoint p2 = [[[touches allObjects] objectAtIndex:1]locationInView:self.view];
endPoint2Label.text = [NSString stringWithFormat:@"結束點 P2.x = %3.2f, P2.y= %3.2f", p2.x, p2.y];
}
}
5. 執行結果如下
其中兩點觸控的操作可參考
IOS模擬器操作
IOS手指辨識基本實作(三)
實作一個辨識手指滑動的起始點到終點的位置點
1. 新開一個專案
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起點 x= %3.2f, y= %3.2f", point.x, point.y];
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"現在點 x= %3.2f, y= %3.2f", point.x, point.y];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"終點 x = %3.2f, y= %3.2f", point.x , point.y];
}
5. 完成後顯示結果如下
1. 新開一個專案
2. 在ViewController上放置三個Label
3. 將這些Label註冊到myTouchViewController.h(從Storyboard 的Label拖拉到檔案上)
#import <UIKit/UIKit.h>
@interface myTouchViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *startPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *movePointLabel;
@property (weak, nonatomic) IBOutlet UILabel *endPointLabel;
@end
@interface myTouchViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *startPointLabel;
@property (weak, nonatomic) IBOutlet UILabel *movePointLabel;
@property (weak, nonatomic) IBOutlet UILabel *endPointLabel;
@end
4. 在myTouchViewController.m上加入所需程式碼如下,分別顯示手指滑動的起始點等。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
startPointLabel.text = [NSString stringWithFormat:@"起點 x= %3.2f, y= %3.2f", point.x, point.y];
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
movePointLabel.text = [NSString stringWithFormat:@"現在點 x= %3.2f, y= %3.2f", point.x, point.y];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.view];
endPointLabel.text = [NSString stringWithFormat:@"終點 x = %3.2f, y= %3.2f", point.x , point.y];
}
5. 完成後顯示結果如下
2012年9月5日 星期三
IOS手指辨識基本實作(二)
聯結Segue及Swipe,實作一個拖拉切換頁數的例子
1. 同樣開一個新的專案,命名為MyTap2
2. 多拉一個ViewController,並個別加上一個Label
3. 分別加上一個Swipe Gesture Recognizer
4. 對兩邊的Swipe,分別拖拉一個Segue到另一邊,右上可設定Swipe的方向。
5. 完成後就可試試看,拖拉後就會互相切換
1. 同樣開一個新的專案,命名為MyTap2
2. 多拉一個ViewController,並個別加上一個Label
3. 分別加上一個Swipe Gesture Recognizer
4. 對兩邊的Swipe,分別拖拉一個Segue到另一邊,右上可設定Swipe的方向。
5. 完成後就可試試看,拖拉後就會互相切換
2012年9月4日 星期二
IOS手指辨識基本實作(一)
2012年9月3日 星期一
MFi (Made for iphone...)
隨著Apple的ipod、iphone上市,為市場掀起一陣旋風,緊接著ipad、ipad2,甚至是new ipad
也上市了,持續為科技及人性帶來不同的新方向與衝擊,iOS設備的陸續問市,改變了許多人的生活。有研究發現,使用者擁有iphone後,每天使用手機的
時間變多了,擁有ipad後,連個人電腦使用的時間也變少了,這股風潮帶動了週邊商機的蓬勃發展,相關產業也因為受到威脅而緊急尋找因應之道。先前,一位
蘋果中國區總代理商曾向記者透露,許多蘋果授權經銷商並不是靠賣iPod、macbook等產品賺錢,而是依靠賣音箱等蘋果週邊配件賺更多的錢,這已是業
界一個公開的秘密。
想要切入Apple週邊這塊大餅,首先要通過MFi認證門檻,除了要了解iOS的IAP命令以外,通信協議學習也需要一段時間,並要即時應變 Apple ATS (Apple Test System) 一系列嚴格的測試及不斷進版,ATS測試主要是針對配件與蘋果機型的相容性,確保不會使蘋果機型出現使用故障。
以ipod週邊設備廠商來說,要達到MFi資格門檻,除了基本連接界面需一致及合適的通信協議序列外,申請認證者要能使用Apple ATS (Apple Test System) 設備執行自我檢查,並將ATS結果交給Apple認證。
至於iPhone及iPad認證,除了前面iPod提到的重點以外,認證配件需要提交認證實驗室檢查GSM / CDMA的等向性電源傳輸及接收靈敏度最低誤碼率(BER)等測試是否達到Apple要求,若設計配件時沒預先考慮週全,將造成大量認證成本卻仍不得其門 而入。
目前開發Android應用遠不及iOS快速,Apple 的 iTunes 系統,讓開發商能夠快速開發 Apple 應用,並輕易獲利。
美國蘋果數碼通訊產品( iPhone 、 iPod 、 iPad )附件認證( Work With iPhone ),測試內容有 TDMA (音頻干擾) ,OAT (天線性能干擾) ,ATS (接口)。
蘋果公司為了嚴格規範音箱產品,編寫了蘋果音箱產品需要進行的測試和標準,這些測試需要在蘋果公司指定授權的全球實驗室內進行,蘋果音箱的測試包括2個必測項(ATS測試和TDMA噪聲測試)和1個選擇項(OTA射頻測試)。
ATS 測試主要測試蘋果音箱與蘋果產品之間的數據通訊有無問題,且需將蘋果公司發行的各代產品全部通過;TDMA噪聲測試為了驗證與iPhone連接的附件產品 在使用時不會產生明顯的可察覺的噪聲;OTA測試是為了驗證iPhone手機網絡連接能力以及終端使用者對輻射和接收性能的影響。
只有順利通過蘋果公司指定的測試標準才有資格標明:“本產品是專門為iPod、iPhone、ipad產品設計,符合蘋果公司產品性能的標準”,才允許打上蘋果認證標誌。只有通過蘋果產品驗證的音箱,才是真正合格的蘋果音箱。
大陸地區的申請方法
http://www.360doc.com/content/12/0301/09/5962017_190728394.shtml
苹果MFI认证apple: OTS,TDMA,OTA认证费用及申请基本流程
《苹果Apple公司电源指标测试,OTA,TDMA测试是什么测试要求和标准》 http://www.pinzhi.org/thread-655-1-1.html
苹果apple OTS,TDMA,OTA认证费用及申请基本流程:第一步是到苹果网站上去填写、提交公司资料。(小提示:要提交公司法律顾问的资料,联系的电子邮件后缀必须是公司网站的后缀)
具体的地址如下:
http://developer.apple.com/programs/mfi/
http://developer.apple.com/programs/start/mfi/
提交资料大概3周后,苹果会和你联系。根据苹果的要求,进一步完善所提交的资料。合格后,苹果会提供用户码。
苹果在中国大陆的办事处在北京建国门那边,他们只接受网上注册。不清楚之话,可以去电北京办事处那边询问,有一个女孩子专门负责这一摊事情,服务态度很好。具体的联系电话已经遗失了。
Apple MFI Certifiation (Made for iphone test approval)苹果认证案例example
http://www.pinzhi.org/thread-2940-1-1.html
I-pod,I-Phono,I-Pad认证服务
国内认证的服务在昆山,预测试的话在东莞和深圳都有,在东莞的叫信宝,预测试1600RMB/小时,
认证的费用:
OTS USD300
TDMA USD300
OTA USD1400
什么是MFI认证?WWI认证是什么?苹果公司的MFI认证和WWI认证区别
http://www.pinzhi.org/thread-2761-1-1.html
想要切入Apple週邊這塊大餅,首先要通過MFi認證門檻,除了要了解iOS的IAP命令以外,通信協議學習也需要一段時間,並要即時應變 Apple ATS (Apple Test System) 一系列嚴格的測試及不斷進版,ATS測試主要是針對配件與蘋果機型的相容性,確保不會使蘋果機型出現使用故障。
以ipod週邊設備廠商來說,要達到MFi資格門檻,除了基本連接界面需一致及合適的通信協議序列外,申請認證者要能使用Apple ATS (Apple Test System) 設備執行自我檢查,並將ATS結果交給Apple認證。
至於iPhone及iPad認證,除了前面iPod提到的重點以外,認證配件需要提交認證實驗室檢查GSM / CDMA的等向性電源傳輸及接收靈敏度最低誤碼率(BER)等測試是否達到Apple要求,若設計配件時沒預先考慮週全,將造成大量認證成本卻仍不得其門 而入。
目前開發Android應用遠不及iOS快速,Apple 的 iTunes 系統,讓開發商能夠快速開發 Apple 應用,並輕易獲利。
美國蘋果數碼通訊產品( iPhone 、 iPod 、 iPad )附件認證( Work With iPhone ),測試內容有 TDMA (音頻干擾) ,OAT (天線性能干擾) ,ATS (接口)。
蘋果公司為了嚴格規範音箱產品,編寫了蘋果音箱產品需要進行的測試和標準,這些測試需要在蘋果公司指定授權的全球實驗室內進行,蘋果音箱的測試包括2個必測項(ATS測試和TDMA噪聲測試)和1個選擇項(OTA射頻測試)。
ATS 測試主要測試蘋果音箱與蘋果產品之間的數據通訊有無問題,且需將蘋果公司發行的各代產品全部通過;TDMA噪聲測試為了驗證與iPhone連接的附件產品 在使用時不會產生明顯的可察覺的噪聲;OTA測試是為了驗證iPhone手機網絡連接能力以及終端使用者對輻射和接收性能的影響。
只有順利通過蘋果公司指定的測試標準才有資格標明:“本產品是專門為iPod、iPhone、ipad產品設計,符合蘋果公司產品性能的標準”,才允許打上蘋果認證標誌。只有通過蘋果產品驗證的音箱,才是真正合格的蘋果音箱。
大陸地區的申請方法
http://www.360doc.com/content/12/0301/09/5962017_190728394.shtml
苹果MFI认证apple: OTS,TDMA,OTA认证费用及申请基本流程
《苹果Apple公司电源指标测试,OTA,TDMA测试是什么测试要求和标准》 http://www.pinzhi.org/thread-655-1-1.html
苹果apple OTS,TDMA,OTA认证费用及申请基本流程:第一步是到苹果网站上去填写、提交公司资料。(小提示:要提交公司法律顾问的资料,联系的电子邮件后缀必须是公司网站的后缀)
具体的地址如下:
http://developer.apple.com/programs/mfi/
http://developer.apple.com/programs/start/mfi/
提交资料大概3周后,苹果会和你联系。根据苹果的要求,进一步完善所提交的资料。合格后,苹果会提供用户码。
苹果在中国大陆的办事处在北京建国门那边,他们只接受网上注册。不清楚之话,可以去电北京办事处那边询问,有一个女孩子专门负责这一摊事情,服务态度很好。具体的联系电话已经遗失了。
Apple MFI Certifiation (Made for iphone test approval)苹果认证案例example
http://www.pinzhi.org/thread-2940-1-1.html
I-pod,I-Phono,I-Pad认证服务
国内认证的服务在昆山,预测试的话在东莞和深圳都有,在东莞的叫信宝,预测试1600RMB/小时,
认证的费用:
OTS USD300
TDMA USD300
OTA USD1400
什么是MFI认证?WWI认证是什么?苹果公司的MFI认证和WWI认证区别
http://www.pinzhi.org/thread-2761-1-1.html
Apple MFI Certifiation (Made for iphone test approval)苹果认证案例example
其它相關網址
苹果MFI认证apple: OTS,TDMA,OTA认证费用及申请基本流程
http://www.pinzhi.org/thread-659-1-1.html
苹果Apple公司电源指标测试,OTA测试,TDMA测试是什么测试要求和标准
http://www.pinzhi.org/thread-655-1-1.html
什么是MFI认证?WWI认证是什么?苹果公司的MFI认证和WWI认证区别
http://www.pinzhi.org/thread-2761-1-1.html
解決方案
http://wenku.baidu.com/view/691db282e53a580216fcfe01.html
http://www.pinzhi.org/thread-659-1-1.html
苹果Apple公司电源指标测试,OTA测试,TDMA测试是什么测试要求和标准
http://www.pinzhi.org/thread-655-1-1.html
什么是MFI认证?WWI认证是什么?苹果公司的MFI认证和WWI认证区别
http://www.pinzhi.org/thread-2761-1-1.html
解決方案
http://wenku.baidu.com/view/691db282e53a580216fcfe01.html
藍牙4.0讓Arduino控制板直達iPhone
http://www.makezine.com.tw/2012/03/28/%E8%97%8D%E7%89%994-0%E8%AE%93arduino%E9%9B%BB%E8%B7%AF%E6%9D%BF%E7%9B%B4%E9%81%94iphone/Wi-Fi Direct
這個架構且相容於原本Wi-Fi 802.11規格的新傳送協定,將是未來藍芽的殺手。
它提供兩種模式Adhoc、Infrastructure, 前者為點對點(一對一)距離較短,後者可和基地台相連,也可互相多點連結,距離較長。(簡單而言就是P2P加AP)
Wi-Fi Direct根據各方報告,具有下列特點:
1. 傳送距離較遠,可達656尺(大約200公尺),比藍芽的200尺(大約60公尺) 遠。
2. 速度較快,250 Mbps,是藍芽的 25 Mbps大約十倍
。
3. WPA2 256-bit 加密,比藍芽的 AES 128-bit更安全。
對用戶的意義就是更方便連結,不一定需要無線基地台(但相容),行動傳送可能性大增!
行動通訊時代一步步進入社會,手機、相機、電視、印表機、iOS裝置、手提電腦,等等將串連在一起。
參考wiki
http://zh.wikipedia.org/wiki/Wi-Fi%E7%9B%B4%E8%BF%9E
Wi-Fi直連(英語:Wi-Fi Direct),之前曾被稱為Wi-Fi 點對點(Wi-Fi Peer-to-Peer),是一套軟體協定,讓 wifi 裝置可以不必透過無線網路基地台(Access Point),以點對點的方式,直接與另一個 wifi 裝置連線,進行高速資料傳輸。這個協定由Wi-Fi聯盟發展、支援與授與認證,通過認證的產品將可獲得Wi-Fi CERTIFIED Wi-Fi Direct標誌。
它的主要對手是藍牙3.0協定。
因為它屬於軟體協定,理論上,舊有的Wi-Fi裝置,有可能透過韌體與軟體升級獲得相容性,不過Wi-Fi聯盟並不保證晶片商一定會支援升級。
Wi-Fi Direct具備直接點對點╱簡易快速連接的特性
Wi-Fi Direct是一種架構在既有Wi-Fi 802.11a/b/g/n規格基礎的軟體層協定,它無須硬體實作,只需要既有Wi-Fi晶片供應商提供Wi-Fi Direct驅動程式,以軟體的功能疊加上去即可。其特點在於:1.隨時直接連線,不需要無線存取點(Wi-Fi AP)。2.自動搜尋裝置,無須輸入SSID。3.使用WPS執行編碼過的安全設定。4.類似藍牙一樣容易配對及連線。
Michael表 示,Wi-Fi Direct跟既有Wi-Fi基礎架構的裝置相容,不僅可使用標準的Wi-Fi協定(801.11a/b/g/n),Wi-Fi Direct可以連接非Wi-Fi Direct的裝置,也可以連接網際網路與Wi-Fi裝置;所有既有的Wi-Fi裝置只要更新支援Wi-Fi Direct功能的驅動程式╱工具程式,都能啟動並應用Wi-Fi Direct連接;像博通(Broadcom)以及其他無線晶片供應商,會提供跨作業系統的Wi-Fi Direct驅動程式。
Michael 也表示,Wi-Fi Direct將進一步驅動下一代Wi-Fi標準─802.11ac,與既有的Wi-Fi基礎架構相容,使用的頻譜為5.15~5.3Ghz,主要強調非壓 縮影音傳輸,尤其是1,920x1,080p Full HD視訊畫面的傳送能力,預定於2012年底規格定案,2013年工作小組審核通過。而目前博通研發中的Wi-Fi 801.11ac晶片代號為VHT5G,傳輸速率提高到3.2Gbps,較802.11n的450Mbps快上6倍之多,涵蓋面可以穿越牆壁達到整個居家 環境。
根據PCWorld網站報導指出, 目前Wi-Fi聯盟已經正式成立Wi-Fi Direct Service工作團隊,預計針對旗下所制定的Wi-Fi Direct標準提供更便利的軟體操作模式,方便讓所有支援Wi-Fi Direct標準的硬體設備可以更容易透過無線網路建立互連應用。Wi-Fi聯盟執行總監Edgar Figueroa透露,Wi-Fi Direct Service工作團隊預計在接下來約12至18個月之內完成相關軟體應用建制,估計在2013年間便可使Wi-Fi Direct技術應用大幅成長。
目前Wi-Fi Direct技術主要讓使用者能透過Wi-Fi環境下建立硬體端之間的連結,例如印表機、數位螢幕或是其他電腦端等,讓使用者可以藉由此技術進行P2P的 檔案內容傳輸,或者是遠端操作其他同樣支援Wi-Fi Direct的硬體裝置。而目前Wi-Fi Direct Service工作團隊的任務,便是讓這些硬體設備可以更容易透過Wi-Fi Direct功能被使用,甚至透過硬用軟體端方面進行多元的無線連結應用,例如目前雖然不少連網印表機均支援Wi-Fi Direct技術,但是在建立連結應用部份卻會讓使用者花費不少設定心力。
而在未來改良部份,除了提昇Wi-Fi Direct連線建立更簡單之外,主要還是希望能更明確讓開發者可以透過此功能設計更好的服務與應用,同時使用者端也能更簡單明瞭可以使用哪些Wi-Fi Direct應用功能。
全文網址: Wi-Fi聯盟:2013年將使Wi-Fi Direct更普及 | 數位生活 | 3C產品 | udn數位資訊 http://mag.udn.com/mag/digital/storypage.jsp?f_ART_ID=402276#ixzz25PMk3s77
Power By udn.com
它提供兩種模式Adhoc、Infrastructure, 前者為點對點(一對一)距離較短,後者可和基地台相連,也可互相多點連結,距離較長。(簡單而言就是P2P加AP)
Wi-Fi Direct根據各方報告,具有下列特點:
1. 傳送距離較遠,可達656尺(大約200公尺),比藍芽的200尺(大約60公尺) 遠。
2. 速度較快,250 Mbps,是藍芽的 25 Mbps大約十倍
。
3. WPA2 256-bit 加密,比藍芽的 AES 128-bit更安全。
對用戶的意義就是更方便連結,不一定需要無線基地台(但相容),行動傳送可能性大增!
行動通訊時代一步步進入社會,手機、相機、電視、印表機、iOS裝置、手提電腦,等等將串連在一起。
參考wiki
http://zh.wikipedia.org/wiki/Wi-Fi%E7%9B%B4%E8%BF%9E
Wi-Fi直連(英語:Wi-Fi Direct),之前曾被稱為Wi-Fi 點對點(Wi-Fi Peer-to-Peer),是一套軟體協定,讓 wifi 裝置可以不必透過無線網路基地台(Access Point),以點對點的方式,直接與另一個 wifi 裝置連線,進行高速資料傳輸。這個協定由Wi-Fi聯盟發展、支援與授與認證,通過認證的產品將可獲得Wi-Fi CERTIFIED Wi-Fi Direct標誌。
它的主要對手是藍牙3.0協定。
歷史
2009年10月14日,Wi-Fi聯盟公布他們正在發展這個協定。2010年10月25日正式開始公開認證。目前已經有 Atheros、Broadcom、Intel、Ralink、Realtek等廠商已經通過認證,開始預備發行具備Wi-Fi Direct功能的產品。內容
Wi-Fi Direct架構在原有的 802.11a、802.11g、802.11n 之上,不支援802.11b。比既有的ad-hoc模式更快,同時也支援 WPA2 加密機制。最大傳輸距離是200公尺,最大傳輸速度為250Mbps,使用2.4GHz與5GHz頻段。它支援一對一,以及一對多模式。因為它屬於軟體協定,理論上,舊有的Wi-Fi裝置,有可能透過韌體與軟體升級獲得相容性,不過Wi-Fi聯盟並不保證晶片商一定會支援升級。
Wi-Fi Direct具備直接點對點╱簡易快速連接的特性
Wi-Fi Direct是一種架構在既有Wi-Fi 802.11a/b/g/n規格基礎的軟體層協定,它無須硬體實作,只需要既有Wi-Fi晶片供應商提供Wi-Fi Direct驅動程式,以軟體的功能疊加上去即可。其特點在於:1.隨時直接連線,不需要無線存取點(Wi-Fi AP)。2.自動搜尋裝置,無須輸入SSID。3.使用WPS執行編碼過的安全設定。4.類似藍牙一樣容易配對及連線。
Michael表 示,Wi-Fi Direct跟既有Wi-Fi基礎架構的裝置相容,不僅可使用標準的Wi-Fi協定(801.11a/b/g/n),Wi-Fi Direct可以連接非Wi-Fi Direct的裝置,也可以連接網際網路與Wi-Fi裝置;所有既有的Wi-Fi裝置只要更新支援Wi-Fi Direct功能的驅動程式╱工具程式,都能啟動並應用Wi-Fi Direct連接;像博通(Broadcom)以及其他無線晶片供應商,會提供跨作業系統的Wi-Fi Direct驅動程式。
Michael 也表示,Wi-Fi Direct將進一步驅動下一代Wi-Fi標準─802.11ac,與既有的Wi-Fi基礎架構相容,使用的頻譜為5.15~5.3Ghz,主要強調非壓 縮影音傳輸,尤其是1,920x1,080p Full HD視訊畫面的傳送能力,預定於2012年底規格定案,2013年工作小組審核通過。而目前博通研發中的Wi-Fi 801.11ac晶片代號為VHT5G,傳輸速率提高到3.2Gbps,較802.11n的450Mbps快上6倍之多,涵蓋面可以穿越牆壁達到整個居家 環境。
根據PCWorld網站報導指出, 目前Wi-Fi聯盟已經正式成立Wi-Fi Direct Service工作團隊,預計針對旗下所制定的Wi-Fi Direct標準提供更便利的軟體操作模式,方便讓所有支援Wi-Fi Direct標準的硬體設備可以更容易透過無線網路建立互連應用。Wi-Fi聯盟執行總監Edgar Figueroa透露,Wi-Fi Direct Service工作團隊預計在接下來約12至18個月之內完成相關軟體應用建制,估計在2013年間便可使Wi-Fi Direct技術應用大幅成長。
目前Wi-Fi Direct技術主要讓使用者能透過Wi-Fi環境下建立硬體端之間的連結,例如印表機、數位螢幕或是其他電腦端等,讓使用者可以藉由此技術進行P2P的 檔案內容傳輸,或者是遠端操作其他同樣支援Wi-Fi Direct的硬體裝置。而目前Wi-Fi Direct Service工作團隊的任務,便是讓這些硬體設備可以更容易透過Wi-Fi Direct功能被使用,甚至透過硬用軟體端方面進行多元的無線連結應用,例如目前雖然不少連網印表機均支援Wi-Fi Direct技術,但是在建立連結應用部份卻會讓使用者花費不少設定心力。
而在未來改良部份,除了提昇Wi-Fi Direct連線建立更簡單之外,主要還是希望能更明確讓開發者可以透過此功能設計更好的服務與應用,同時使用者端也能更簡單明瞭可以使用哪些Wi-Fi Direct應用功能。
全文網址: Wi-Fi聯盟:2013年將使Wi-Fi Direct更普及 | 數位生活 | 3C產品 | udn數位資訊 http://mag.udn.com/mag/digital/storypage.jsp?f_ART_ID=402276#ixzz25PMk3s77
Power By udn.com
到現在為止,支援 Wi-Fi Direct 檔案傳輸的裝置仍然不多,在 Android 4.0 中,其實是支援Wi-Fi Direct 功能,有些裝置像是 Galaxy Nexus 在設定中有這個選項,但是與其他裝置卻無法使用 Wi-Fi Direct 傳輸方式,只有開啟和關閉。
訂閱:
文章 (Atom)




























