비디오: 8년차 앱등이가 알려주는, 아이폰 숨겨진 꿀기능 5가지! 이거 왜 다들 몰라요 ㅠㅠ 2024
iOS 앱에서 자동차를 드래그하여 화면의 아무 곳에 나 배치 할 수 있다면 좋을 것입니다. 여기서는 객체 드래그를 코딩하는 방법과 iOS 장치에서 작업하는 방법을 알아 봅니다. 손가락을 건 드리면 UI 이벤트 객체에
캡슐화 된 (포함 된) 터치 이벤트가 응용 프로그램의 이벤트 대기열에 추가됩니다. UITouch 개체가 화면을 터치하는 각 손가락에 대해 존재하므로 개별 터치를 추적 할 수 있습니다.
이 응용 프로그램에서는 방금 설명한 처음 두 가지 방법에만 관심이 필요합니다.
터치 이벤트에 응답하는 프로세스를 시작하려면 TestDriveController에 새 인스턴스 변수 (굵은 체)를 추가하십시오. m 구현 파일.
@interface TestDriveController () {AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID;BOOL touchInCar;
} -d
다음으로 touchesBegan: 메소드를 TestDriveController에 추가하십시오. m을 눌러 접촉 추적을 시작하십시오. UIViewController가 UIResponder 기본 클래스에서 상속하므로 실제로이 메서드를 재정의합니다. . NSSet의 객체에 액세스하려면 anyObject 메서드를 사용합니다.이 객체는 세트의 객체 중 하나를 반환합니다. 여기서 우리는 하나의 객체를 가정합니다. 그러나 추가 가능성을 처리하는 방법을 이해할 수 있도록이 문제를 직접 탐구 해 볼 수 있습니다.
다음 코드는 anyObject 메소드를 설정하는 방법을 보여줍니다.
UITouch * touch = [touches anyObject];다음으로 코드가 사용자의 터치 이벤트가 자동차 (UIImage)보기에 있는지 여부를 결정하게합니다. if (CGRectContainsPoint (self.차. 프레임, [locationInView 터치: 자기. view]))
CGRectContainsPoint는 사각형 (뷰 좌표)에 점이 있으면 YES를 반환하는 함수입니다. car 프레임을 사각형으로 지정합니다:
self. 차. frame
를 호출하고 locationInView: 메시지를 touch:
locationInView: self로 보내 포인트를 지정합니다. view
locationInView: 주어진 뷰의 좌표계에서 수신기의 현재 위치를 반환합니다. 이 경우 기본보기를 사용하고 있지만 다른보기 내에서 위치를 결정하려는 경우보기를 변경하고자 할 수 있습니다. 어쩌면 사용자는 이불 가스 페달을 만지고있을 것입니다.
터치가 자동차에 있다고 판단되면 touchInCar 인스턴스 변수에 YES를 지정합니다. 그렇지 않은 경우 NO를 지정하고 응답 체인에 메시지를 전달합니다. touchInCar를 나중에 사용하여 사용자가 차를 끌고 있는지 또는 화면 위로 손가락을 움직이는 지 여부를 결정할 수 있습니다.
touchesBegan의 기본 구현은 아무 작업도 수행하지 않습니다. 그러나 UIResponder에서 직접 파생 된 하위 클래스, 특히 UIView는 응답 체인에 메시지를 전달합니다. 메시지를 다음 응답자에게 전달하려면 메시지를 super (슈퍼 클래스 구현)로 보내십시오.
super (공통 사용 패턴)를 호출하지 않고 touchesBegan: withEvent:를 겹쳐 쓰는 경우, 스텁 (비어있는) 구현으로 만 터치 이벤트를 처리하는 다른 메소드도 대체해야합니다.
기본적으로 여러 번 터치 할 수 없습니다. 앱이 여러 터치 이벤트를 수신 할 수있게하려면 해당 뷰 인스턴스의 multipleTouchEnabled 속성을 YES로 설정해야합니다.
사용자가 기분 좋게 화면에서 자동차를 움직이면 (
자신에게 줌
확대), 앱에 지속적으로 touchesMoved: 메시지가 전송됩니다. Listing 10-13의 코드를 TestDriveController에 추가한다. 그 방법을 오버라이드하면 사용자의 손가락이있는 곳으로 차를 옮길 수 있습니다.
- (void) touchesMoved: (NSSet *) withEvent:(UIEvent *) 이벤트 {if (touchInCar) {UITouch * touch = [touches anyObject]; 본인. 차. center = [touch locationInView: 자기를 터치합니다.
첫 번째 터치가 Car 뷰에있는 경우 (touchInCar가 YES 인 경우) car의 center 속성을 터치 좌표에 할당합니다. center 속성에 새 값을 할당하면보기의 위치가 즉시 변경됩니다. 그렇지 않으면 터치를 무시하고 응답 체인에 메시지를 전달합니다.
버튼 옆에 자동차를 놓으면 드라이브 테스트 버튼을 터치 할 때 버튼 아래로 여행한다는 사실을 관찰하는 것은 흥미로운 일입니다. 이 기능은 하위 뷰 구조를 보여줍니다.
자동차를 움직이고 테스트 드라이브 버튼을 사용하여 실험하십시오. 시운전 중에 차를 위치시키기위한 공식에 문제가 있으면 차가 다른 곳에서 출발 할 때 볼 수 있습니다.